Introduction

This document covers 3D printing concepts and principles, specifically using the Bambu Lab H2S. 3D printers like the H2S print layers on top of each other to form 3D objects. These layers are printed using different types of plastics, where the plastic is first melted and then extruded out of a nozzle.

Hardware

The H2S is enclosed on all sides in the shape of a rectangular prism. The inside of the prism is referred to as the chamber, which is climate controlled and contains all the machinery for 3D printing. [src]

H2S front diagram

The subsections below detail the machinery within the chamber.

Toolhead

The machinery responsible for laying down material is the toolhead. [src] The toolhead is an assembly consisting of ...

Filament enters the nozzle through the PTFE connector located at the top, where the extruder motor grabs it and pushes it into the hotend located at the bottom. The hotend's nozzle poking out of the toolhead enclosure is sandwiched between cooling ducts, where the part cooling fan directs air to rapidly cool filament as it's printed.

toolhead front diagram [src]

🔍SEE ALSO🔍

Heatbed

↩PREREQUISITES↩

As the name suggests, the heatbed is a heat controlled surface within the H2S. It magnetically secures a build plate, which is a swappable part that serves as the print surface (build plate types have different properties / target different filament materials). Depending on the material being printed, the heatbed's controlled heating may be required or otherwise beneficial for print quality (e.g., adhesion and / or reducing printing artifacts).

H2S heatbed placement [src]

Movement

↩PREREQUISITES↩

The toolhead moves on the XY plane using the CoreXY system, H2S's system for moving the toolhead front-back and left-right. The system is comprised of a pair of synchronized motors at the rear face of the chamber responsible for moving the toolhead on the X and Y axes: A motor and B motor. The motors are located at the rear inside face of the H2S, near the top. The B motor is on the left and the A motor is on the right.

The motors connect through the X-axis linear rail and the Y-axis linear rods via a pair of belts. The ...

Both motors work in tandem to coordinate movement in both directions (e.g., one motor isn't solely responsible on an axis).

The toolhead doesn't move on the Z-axis. Instead, depth is controlled by moving the heatbed down as layers are printed out from bottom-to-top. The Z-axis threaded and linear rods are responsible for moving the heatbed.

H2S movement [src]

Nozzle Cleaning

↩PREREQUISITES↩

The H2S has 2 mechanisms to clean the nozzle. The first mechanism is the purge wiper, a block at the back left of the H2S responsible for cleaning the toolhead between prints / filament changes. The purge wiper consists of ...

The toolhead knocks into the waffle / strips to clean off old stuck filament, sending it down the purge chute.

purge wiper placement purge wiper top view [src] [src]

The second mechanism is the nozzle wiper sheet, a sheet on the edge of the heatbed that the nozzle moves across to keep the tip smooth and free of debris. [src]

Climate Control

↩PREREQUISITES↩

In addition to the heatbed and the hotend, there are several additional climate control mechanisms within the H2S. These all work in tandem to appropriately heat and cool filament material:

H2S climate control H2S auxiliary part cooling fan

Status Light

↩PREREQUISITES↩

Just below the heatbed, facing forward and running side-to-side, is a light bar. The light bar, referred to as the status light, changes color to show the operating status of the H2S:

Automatic Material System 2 Pro

Automatic Material System 2 Pro is an extension to the H2S that manages multiple filaments. The AMS 2 Pro ...

The AMS 2 Pro supports 4 spools per unit, and supports chaining up to 4 AMS 2 Pro units together to support up to 16 spools per print. Additionally, the 4 chained AMS 2 Pro units may be chained up even further by 8 AMS HT units, enabling up to 24 spools per print.

AMS 2 Pro top diagram [src] [src]

Filament Inlet

↩PREREQUISITES↩

The H2S's chamber has 2 inlets to feed filament to the toolhead, one specifically for TPU and one specifically for non-TPU. The non-TPU inlet passes filament through a filament buffer, a tension-control / slack-management device at the rear face of the H2S. The filament buffer slides forward and backward, storing a small buffer of filament as it slides forward.

When the non-TPU inlet is hooked up to ...

The TPU inlet bypasses the filament buffer. The inlet in positioned just to the right of the filament buffer, feeding the PTFE directly from the exterior into the chamber. The PTFE tube used for the TPU inlet may either be the same PTFE tube attaching the filament buffer to the toolhead (disconnecting it and reconnecting it to the TPU inlet) or a separate PTFE tube.

filament buffer and TPU inlet placement [src]

⚠️NOTE️️️⚠️

In some cases, you may be able to use TPU with the non-TPU inlet. If you're using an AMS 2 Pro and your TPU is specifically branded as TPU for AMS, you can use it. [src]

Operation

↩PREREQUISITES↩

The subsections below detail high-level operational guidelines of the H2S.

Operational Placement

The H2S must be placed on a flat and stable surface. The operating space recommended is 80cm width x 102cm depth x 105cm height, which covers the space required in the back for the exhaust and an AMS 2 Pro to sit on top. [src]

Operational Climate

The H2S is recommended to be operated in temperatures between 15-30C (60-85F). If the temperature is ...

The chamber has an assortment of fans and vents to circulate cool air / blow out hot air (e.g., chamber exhaust fan, auxiliary part cooling fan, and chamber intake vent), but in warmer climates that may not be enough. [src]

Auto-calibration

H2S's auto-calibration attempts to adjust itself to account for the expected variances between manufactured H2S printers and variances caused by wear. Examples of calibrations include bed leveling (working around variances in the heatbed), motor noise cancellation, and vibration compensation.

Trigger auto-calibration manually by navigating to [Wrench Icon]SettingsCalibration. Perform auto-calibration whenever ...

⚠️NOTE️️️⚠️

There are optional modules to perform even tighter calibration. Specifically, the vision encoder.

Filament Loading

Filament can be loaded through either an AMS unit (e.g., AMS 2 Pro or AMS HT) or the external spool holder. The external spool holder is used when ...

⚠️NOTE️️️⚠️

The source doesn't cite this, but I know for a fact that TPU is not supported by the AMS 2 Pro and must be fed via the external spool holder (unless it's specifically branded as TPU for AMS, which Bambu Lab sells).

To load filament using the AMS 2 Pro, ...

  1. open the two tabs on the front edge and lift the cover.
  2. stick the spool into one of the four slots, ensuring that it sits on the slot's roller and rotates freely.
  3. push the slot's inlet release tab toward the spool and feed filament into that inlet - inlet will automatically grip and pull in filament.
  4. close the cover and lock it in by closing the two tabs on the front edge.
  5. select filament properties:

AMS 2 Pro top diagram

To load filament using the external spool holder, ...

  1. place filament on external spool holder, where filament tip faces up.
  2. push filament through PTFE tube until you feel resistance (should reach into printer's extruder).
  3. load filament into extruder:
    1. navigate to [Spool Icon] and ensure extruder icon is green (confirms filament reaches extruder).
    2. tap the external spool, then select filament brand, material, and color, then tap Confirm.
    3. tap Load (pulls filament into extruder).
  4. inspect as loading process performs a sample extrusion:

external spool diagram

[src]

Filament Refill

Most Bambu Lab filaments come wound up on twist-apart spools. Once the filament on the spool has been all used up, a refill may be purchased (refill means filament without a spool) and reinserted into the empty spool. Refills come pre-wound ready to be inserted directly on to the spool.

To refill a spool ...

  1. twist-apart the spool.
  2. place pre-wound refill over interior cylinder of spool, aligning refill's notch against the tiny square extrusion.
  3. place two sides of spool back together and twist until it clicks.
  4. remove plastic straps holding the refill's shape.
  5. place sticker on outside of the spool.

Depending on the type of material, some filaments come wound up on cardboard spools. Only plastic Bambu Lab spools are refillable, not cardboard.

filament refill diagram [src]

User Interface

The H2S's UI is exposed via a touch screen on the exterior of the front face, located on the top left.

touchscreen placement

Along the left side of the UI are 5 options, each represented by an icon:

  1. [Home]: Primary functions and readings (e.g., triggering prints, sensor readings, WiFi status, and statistics).
  2. [Controls]: Control panel for hardware settings (e.g., fan speed, nozzle and heatbed temperature, light, speed, and motion).
  3. [Filaments]: Control panel for filament management (e.g., AMS 2 Pro functionality and manually selecting material and color).
  4. [Settings]: Control panel for printer calibration as well as system and identity settings (e.g., account information, WiFi, firmware, and USB).
  5. [Health Monitoring System]: Printer diagnostics. [src]

The subsections below provide instructions on how to navigate to important parts of the UI.

Calibration

To calibrate the H2S, navigate to [Settings]CalibrationPrint Calibration, select the desired calibrations and hit Start. [src]

Print

To print, navigate to [Home]Print Files and select the drive and file to load. Two drives should be present:

Once a file is chosen, select the appropriate Plate and Nozzle (H2S comes with "Textured PEI" plate and "0.4mm Standard" nozzle - these should be selected as defaults). Then, hit Next and select the filament to print with. Then, hit Print to begin printing. [src]

Print Speed

To configure the printing speed, navigate to [Controls]Speed and select either Silent, Standard (default), Sport, or Ludicrous. [src]

⚠️NOTE️️️⚠️

An introductory YouTube video I watched mentioned that the faster the speed is, the lower quality the print will be. Some people are willing to accept lower quality prints in exchange for speed.

Toolhead and Heatbed Movement

To perform movements of the toolhead (XY axis) and heatbed (Z axis), navigate to [Controls]Motion and tap the adjustment buttons as necessary. [src]

⚠️NOTE️️️⚠️

This seems to only be for testing purposes and moving things to get at parts? I had to use this feature to get at a thin piece of plastic that popped off and fell on the bottom of the H2S. I moved the heatbed up so I could fit my hand in and reach it.

Extruder Movement

To perform ad hoc extrusion and retraction of filament, navigate to [Controls]Nozzle & Extruder and use the up/down buttons under Extruder. [src]

⚠️NOTE️️️⚠️

This seems to be for testing purposes. But also, does this have to be done when swapping between AMS 2 Pro and external spool holder?

Nozzle Type

When the nozzle has been swapped, navigate to [Controls]Nozzle & Extruder and select the nozzle's type under Nozzle. [src]

Nozzle Temperature

To set the nozzle's temperature, navigate to [Controls]Nozzle & Extruder and select the nozzle's temperature under Nozzle. [src]

⚠️NOTE️️️⚠️

This seems to only be for testing purposes and doesn't apply to any prints? AFAIK initiating a new print should unset this as the print needs specific temperatures based on the print and the filament used.

Heatbed Temperature

To set the heatbed's temperature, navigate to [Controls]Heatbed and select the temperature. [src]

⚠️NOTE️️️⚠️

This seems to only be for testing purposes and doesn't apply to any prints? AFAIK initiating a new print should unset this as the print needs specific temperatures based on the print and the filament used.

Chamber Temperature

To set the chamber's temperature, navigate to [Controls]Chamber and select the temperature. [src]

⚠️NOTE️️️⚠️

This seems to only be for testing purposes and doesn't apply to any prints? AFAIK initiating a new print should unset this as the print needs specific temperatures based on the print and the filament used.

Chamber Light

To turn the chamber's light on/off, navigate to [Controls] and toggle the Light switch. [src]

Heating and Cooling

To configure the H2S's internal climate, navigate to [Controls]Air Condition and select either Cooling or Heating. Individual parts that control the climate (e.g., fans, heaters, and exhausts) are listed and can be individually controlled. [src]

When the mode is set to ...

Filament Type

To select which filaments are in the AMS 2 Pro and / or external spool holder, navigate to [Filament] and select the desired spool to input the type, color, and manufacturer of filament. Bambu Lab filaments come with RFID that allows the AMS 2 Pro to automatically identify material and color. [src]

Filament Auto Refill

When a filament runs out, the H2S and attached AMS 2 Pro unit automatically swap to a second spool to continue printing, provided that second spool has the same brand, color, and material of the original spool being printed with. To enable auto refill, navigate to [Settings]AMS Options and select AMS Auto-Refill. Then, navigate to [Filament], select the wrench icon, and select Auto Refill to view refill relationships. [src].

⚠️NOTE️️️⚠️

On the H2D, there are 2 extruders (left and right) and apparently each of the H2D's AMS 2 Pro units is assigned to one of these heads (there may be multiple AMS 2 Pros per printer). The second spool must be in an AMS 2 Pro unit assigned to the same extruder for auto refill to use it.

Filament Drying

To dry filament, ensure the spool is loaded into the AMS 2 Pro and navigate to [Filament] and find the water droplet icon. Below the icon should be a humidity sensor reading. Select the water droplet icon and either ...

..., then select Start. [src]

⚠️NOTE️️️⚠️

What happens when the filaments within the AMS 2 Pro aren't all the same material? It seems there might be some guard rails preventing you from doing this with certain mixes of materials.

When drying high-temperature filament, you need to take out the low-temperature filament. For example, when drying ABS, PLA filament cannot be placed in the AMS.

[src]

⚠️NOTE️️️⚠️

Only some filament materials need an AMS HT for drying, not an AMS 2 Pro.

Filament Guide

The following table summarizes key characteristics of filaments supported by the H2S (as of time of writing). The column(s) ...

⚠️NOTE️️️⚠️

The list below isn't exhaustive, and some filament types of sub-types (e.g., Neon PLA) require specific hardware to print with (e.g., hardened steel nozzle or engineering build plate).

Name Stiffness Impact Strength Heat Deflection Temperature
(ISO 75)
Saturated Water Absorption Rate Nozzle temperature Heatbed temperature Chamber temperature Drying Resistance
PLA [src] 1.5/5 2/5 1.8 MPa 54C
0.45 MPa 57C
25C 55% RH 0.43% 190-230C 35-45C 25-45C 50C 8h Acid: no
Alkali: no
Organic solvent: some no
Oil/grease: most yes
Flammable: yes
PLA-CF [src] 2/5 1.5/5 1.8 MPa 54C
0.45 MPa 55C
25C 55% RH 0.42% 210-240C 35-45C 55C 8h Acid: no
Alkali: no
Organic solvent: some no
Oil/grease: most yes
Flammable: yes
PETG HF [src] 1/5 2.5/5 1.8 MPa 62C
0.45 MPa 69C
25C 55% RH 0.40% Acid: no
Alkali: no
Organic solvent: some no
Oil/grease: most yes
PETG-CF [src] 1.5/5 3/5 1.8 MPa 67C
0.45 MPa 74C
25C 55% RH 0.30%
ABS [src] 1/5 3/5 1.8 MPa 84C
0.45 MPa 87C
25C 55% RH 0.65% 240-270C 80-100C 45-60C 80C 8h Acid: yes
Alkali: yes
Organic solvent: some no
Oil/grease: some no
Flammable: yes
ABS-GF [src] 1.5/5 1/5 1.8 MPa 88C
0.45 MPa 99C
25C 55% RH 0.53% 260-280C 90-100C 60-70C 80C 8h Acid: yes
Alkali: yes
Organic solvent: some no
Oil/grease: some no
Flammable: yes
ASA [src] 1/5 3/5 1.8 MPa 92C
0.45 MPa 100C
25C 55% RH 0.45% 240-270C 80-100C 45-60C 80C 8h Acid: yes
Alkali: yes
Organic solvent: some no
Oil/grease: some no
Flammable: yes
ASA-CF [src] 2/5 0.5/5 1.8 MPa 102C
0.45 MPa 110C
25C 55% RH 0.33%
PC [src] 1.5/5 2.5/5 1.8 MPa 117C
0.45 MPa 112C
25C 55% RH 0.25% 260-280C 90-100C 45-60C 80C 8h Acid: no
Alkali: no
Organic solvent: some no
Oil/grease
Flammable: yes
PC FR [src] 1/5 3.5/5 1.8 MPa 108C
0.45 MPa 113C
25C 55% RH 0.12% 260-280C 90-100C 80C 8h Flammable: retardant
TPU 95A HF [src] 0.5/5 5/5 N/A 25C 55% RH 1.08%
TPU 90A [src] 0.5/5 5/5 N/A 25C 55% RH 0.61%
TPU 85A [src] 0.5/5 5/5 N/A 25C 55% RH 0.67%
TPU for AMS [src] 0.5/5 5/5 N/A 25C 55% RH 1.20% 220-240C 30-35C 70C 8h Acid: no
Alkali: no
Organic solvent: some no
Oil/grease: most yes
Flammable: yes
PA6-CF [src] 3/5 3/5 1.8 MPa 164C
0.45 MPa 186C
25C 55% RH 2.35%
PA6-GF [src] 2/5 2/5 1.8 MPa 158C
0.45 MPa 182C
25C 55% RH 2.56%
PAHT-CF [src] 2.5/5 3.5/5 1.8 MPa 170C
0.45 MPa 194C
25C 55% RH 0.88%
PET-CF [src] 3/5 2.5/5 1.8 MPa 182C
0.45 MPa 205C
25C 55% RH 0.37% 260-290C 80-100C 45-60C 80C 8-12h Acid: no
Alkali: no
Organic solvent: some no
Oil/grease: most yes
Flammable: yes
PPA-CF [src] 5/5 3/5 1.8 MPa 196C
0.45 MPa 227C
25C 55% RH 1.30%
PPS-CF [src] 4/5 1.5/5 1.8 MPa 235C
0.45 MPa 264C
25C 55% RH 0.05% 310-340C 100-120C 60-90C 100-140C 8-12h Acid: yes
Alkali: yes
Organic solvent: yes
Oil/grease: yes
Flammable: retardant
(self-extinguishing when away from fire)

⚠️NOTE️️️⚠️

Stiffness and impact strength columns come from the Bambu Lab product page for the specified filament. Remaining columns come from the Bambu Lab technical document sheet (TDS) for that product.

Build Plate Guide

A plate that sits on the heatbed and serves as the print surface. There are different types of build plates, each with different properties targeting different filament materials (4 as of time of writing):

The following table summarizes filament materials supported and material requirements for each build plate.

Build Plate Material Heatbed Temperature Glue Required?
Cool Plate SuperTack Pro PLA 40C No
Cool Plate SuperTack Pro PETG 60C No
Textured PEI Plate PLA/PLA-CF/PLA-GF 45-60C No
Textured PEI Plate ABS 90-100C Stick
Textured PEI Plate PETG/PETG-CF 60-80C No
Textured PEI Plate PET-CF 80-100C No
Textured PEI Plate TPU 85A/90A 35-45C No
Textured PEI Plate TPU 95A for AMS 35-45C Stick
Textured PEI Plate ASA 90-100C Stick
Textured PEI Plate PVA 45-60C No
Textured PEI Plate PC/PC-CF 90-110C Stick
Textured PEI Plate PA/PA-CF/PAHT-CF 90-110C Stick
Smooth PEI Plate PLA/PLA-CF/PLA-GF 45-60C No
Smooth PEI Plate PETG/PETG-CF 60-80C Stick/Liquid
Smooth PEI Plate ABS 90-100C Stick/Liquid
Smooth PEI Plate ASA 90-100C Stick/Liquid
Smooth PEI Plate TPU 35-45C Stick/Liquid
Smooth PEI Plate PVA 45-60C Stick/Liquid
Smooth PEI Plate PC/PC-CF 90-110C Stick
Smooth PEI Plate PA/PA-CF/PAHT-CF 90-110C Stick
Smooth PEI Plate PET-CF 80-100C Stick/Liquid
Engineering Plate PLA/PLA-CF/PLA-GF 45-60C Stick/Liquid
Engineering Plate PETG/PETG-CF 60-80C Stick/Liquid
Engineering Plate ABS 90-100C Stick/Liquid
Engineering Plate ASA 90-100C Stick/Liquid
Engineering Plate TPU 35-45C Stick/Liquid
Engineering Plate PVA 45-60C Stick/Liquid
Engineering Plate PC/PC-CF 90-110C Stick/Liquid
Engineering Plate PA/PA-CF/PAHT-CF 90-110C Stick/Liquid
Engineering Plate PET-CF 80-100C Stick/Liquid

Of the build plates listed, the ...

⚠️NOTE️️️⚠️

Textured PEI Plate only supports glue sticks, not liquid glue? The table just says "Yes" or "No" but doesn't explicitly mention either, but the header of that column says "Requires Glue Stick?" so I specifically put down stick.

Textured PEI Plate's buy page (where the Textured PEI portion of the table above comes from) also had an extra column about whether the cover should be removed, but that has nothing to do with the build plate? It's to prevent heat creep?

[src] [src] [src] [src] [src]

Bambu Studio

↩PREREQUISITES↩

Bambu Studio is H2S's desktop software. It provides access to MakerWorld (a repository of printable objects), processes 3D models for printing by slicing them, and controls and gets feedback from the H2S. [src] Bambu Studio works with many brands of 3D printers, not just Bambu Lab printers. [src].

⚠️NOTE️️️⚠️

There's also a software product called Bambu Suite, but that's for cutting and engraving while Bambu Studio is for printing.

User Interface

Bambu Studio has 6 main screens (referred to as tabs), which can be navigated between using the top toolbar:

  1. Home: Welcome screen, user manuals, opening projects, print history.
  2. Prepare: Object/model placement, orientation, and manipulation.
  3. Preview: Print instructions, information, and diagnostics.
  4. Device: H2S interface and management.
  5. Project: Informative fields describing project.
  6. Calibration: H2S calibration.

Above the top toolbar is the main menu, packed to condensed space. Next to the packed main menu are a few quick access buttons: Save, undo, and redo. Regardless of which screen you're on, the top toolbar (and main menu and quick access buttons) should always be present.

The standard workflow is to plan out what and where things get printed on the Prepare screen, then review how the print will get sliced along with diagnostics on the Preview screen, then initiate the print.

Bambu Studio top toolbar [src]

3D Viewport

Bambu Studio has a 3D viewport on both the Prepare screen and the Preview screen.

Bambu Studio's Prepare screen is for transforming models for print (e.g., orientation, scale, position, and color) as well as configuring print settings (e.g., layer height and infill density).

Prepare viewport controls:

Action Shortcut
Rotate camera 🖰 Left-drag
(ensure no object is selected)
Pan camera 🖰 Right-drag
Zoom camera 🖰 Scroll wheel
Select object 🖰 Left-click object
Select additional object Ctrl + 🖰 Left-click object
Select multiple objects Shift + 🖰 Right-drag green selection rectangle over objects
Deselect objects 🖰 Left-click area without object
Select all objects Ctrl + A
Move selected objects 10mm Arrow key (←, ↑, →, or ↓)
(ensure object is selected)
(movement occurs relative to camera's view)
Move selected objects 1mm Shift + Arrow key (←, ↑, →, or ↓)
(ensure object is selected)
(movement occurs relative to camera's view)
Undo Ctrl + Z
Redo Ctrl + Y

Bambu Studio's Preview screen is for exploring slices. Each screen is partitioned into a 3D viewport and a left sidebar.

Preview viewport controls:

Action Shortcut
Move vertical slider ↑ or ↓
Move horizontal slider ← or →
Toggle single layer view L
Pan camera 🖰 Right-drag
Zoom camera 🖰 Scroll wheel
Select multiple objects Shift + 🖰 Right-drag green selection rectangle over objects
Select additional object Ctrl + 🖰 Left-click object
Select all objects Ctrl + A
Move selected objects 10mm Arrow key (←, ↑, →, or ↓)
(ensure object is selected)
(movement occurs relative to camera's view)
Move selected objects 1mm Shift + Arrow key (←, ↑, →, or ↓)
(ensure object is selected)
(movement occurs relative to camera's view)
Undo Ctrl + Z
Redo Ctrl + Y

To the left of the 3D viewport is a sidebar.

Bambu Studio Prepare screen sidebar

The sidebar contains a ...

Project Filaments

↩PREREQUISITES↩

Bambu Studio has a section for defining which filaments are available to a project. The Project Filaments section is in the sidebar of the Prepare screen and the Preview screen.

Bambu Studio Prepare screen project filaments

Each filament is assigned an ID (e.g., 1, 2, ...). Objects and layers within the 3D viewport, rather than being assigned an exact filament, are instead assigned one of these IDs. The filament assigned to the ID number can be swapped to a different filament via the dropdown next to the ID, thereby automatically updating any areas of an object layer making use of that ID.

At the bottom is an Add Mixed Filament button. Mixed filaments is a mix of existing filaments printed in interleaved layers to achieve a new color via half-toning (e.g., alternating between 1 layer black and 1 layer white gives the impression that the printed object is gray). Mixed filaments are not recommended on the H2S because it's a single nozzle printer - excessive swapping between filaments causes a lot of waste. [src] [src]

⚠️NOTE️️️⚠️

Mixed filaments don't have the desired effect on top/bottom surfaces because those are single layers and only one color is printed per layer? They work best on near vertical walls. It may be possible to rotate the object such that top/bottom surfaces are reduced, but it'll likely require introducing supports.

⚠️NOTE️️️⚠️

There's a whole section on filament settings: https://bambulab.com/en/support/academy/3/course/982590125637046272/chapter/43. I don't think I ever need to mess with it if I'm using Bambu Lab filaments? The defaults should all work just fine?

🔍SEE ALSO🔍

Print Parameters

↩PREREQUISITES↩

Bambu Studio has a section for defining how models and model groupings (assemblies) are printed. The Process section is in the sidebar of the Prepare screen and the Preview screen.

Bambu Studio Prepare screen process

The Process section can change scope using a toggle (section 1). The scope can either be global, or it can target a specific set of objects (e.g., a model, an assembly, or some combination of models/assemblies). If not scoped globally, an object hierarchy will be displayed directly below the toggle (section 3). The selections in the object hierarchy will reflect those in the 3D viewport and vice versa.

Below the object hierarchy is a hierarchy of parameters that control printing:

A full accounting of parameters is beyond the scope of this section. Individual parameters will be referenced / explained in subsequent sections as needed.

[src]

Print Preview

↩PREREQUISITES↩

Bambu Studio will slice the objects on the build plate whenever ...

The Preview screen is where the layers, nozzle paths (G-code printing instructions), and printing diagnostics are color-coded and displayed to the user. The screen is broken up into the following controls / panels:

Bambu Studio Preview screen slicer example

  1. Layer slider: Scrubber that navigates between layers, highlighting those layers in the 3D viewport.
  2. Path slider: Scrubber that navigates the nozzle path of the layer, highlighting in the 3D viewport what actually gets printed as the toolhead / nozzle moves from beginning to end.
  3. Layer range toggle: If toggled, the layer slider will have two handles identifying a range of layers to highlight. If not toggled, the layer slider will have only one handle, meaning it will target exactly 1 layer for highlighting.
  4. 3D viewport: Visualized layers and paths.
  5. Slice result: Dialog mapping of path colors to meaning. In the above example, the colors map to print speeds.
  6. Color scheme: Remaps colors to different metrics / diagnostics. In the above example, the colors map to print speeds. But, if this were instead changed to Temperature, it would map colors to nozzle temperatures at each point in the path.

There are several color schemes available. A full accounting is outside the scope of this section.

[src]

Project Persistence

Bambu Studio saves and loads project state as a 3MF file.

Alternatively, Bambu Studio's Home screen integrates MakerWorld. MakerWorld is an online repository of printable projects, openable as if opening a local project. [src]

Object Importing

↩PREREQUISITES↩

Import 3D objects into the project either via ...

Bambu Studio Prepare screen toolbar

The file formats supported by the import function span both graphics formats (e.g., OBJ) and manufacturing formats (e.g., STL).

⚠️NOTE️️️⚠️

Bambu Studio can export the project's 3D objects under FileExport.

⚠️NOTE️️️⚠️

A complete accounting of file formats isn't appropriate here. Just note that, if you're importing SVGs, SVGs have no height. Once an SVG is imported, Bambu Studio gives it a tiny height and then you can scale it to make it taller.

Alternatively, Bambu Studio's Home screen integrates MakerWorld. MakerWorld is an online repository of printable projects. MakerWorld projects can't be imported directly into the current Bambu Studio project. However, it is possible to open a MakerWorld project, save it as a 3MF file (or export as some other file format), and import that file into an existing project. [src]

Object Placement

↩PREREQUISITES↩

In the Prepare screen's 3D viewport, objects can be moved by either ...

⚠️NOTE️️️⚠️

Objects typically can't be lifted off the build plate without first merging. See Bambu Studio/Object Combining.

Object Rotation

↩PREREQUISITES↩

In the Prepare screen's 3D viewport, selected objects can be manually rotated by using the rotation tool in Prepare screen's toolbar (button 7, keyboard shortcut R), which will present rotational axis circles that can be left-click dragged and a pop-up with angles.

Bambu Studio Prepare screen toolbar

Bambu Studio Prepare screen rotation parameters

Alternatively, an object may be rotated via ...

Object Scale

↩PREREQUISITES↩

In the Prepare screen's 3D viewport, selected objects can be manually scaled by using the scale tool in Prepare screen's toolbar (button 8, keyboard shortcut S), which will present scale axis points that can be left-click dragged and a pop-up with scaling parameters.

Bambu Studio Prepare screen toolbar

Bambu Studio Prepare screen rotation parameters

The screenshot above has the following sections:

  1. Coordinates - ?

  2. Scale - Percentage scaled vs original size (X, Y, and Z).

    Size - Absolute size on an axis (X, Y, and Z).

  3. uniform scale: If clicked, the other axes will maintain proportions by automatically scaling to be based on a single axis that was scaled. [src]

⚠️NOTE️️️⚠️

I couldn't figure out what the Coordinates dropdown actually does?

Object Combining

↩PREREQUISITES↩

In certain cases, two objects may need to combine into one for printing, such that they print as a single object vs two separate objects.

In the Prepare screen's 3D viewport, select two or more objects, then right-click to open the context menu and select Merge. Merged objects are placed under a single assembly.

Bambu Studio Prepare screen assembly example

Once objects are within a single assembly, they can be manually moved into each other and / or levitated off the build plate using the move tool (Prepare screen's toolbar button 6, keyboard shortcut M). If objects aren't merged but occupy the same space, slicing will print them as if they're distinct. That is, if two objects occupy the same space, the outer shell / wall of both objects will be drawn inside each other.

Bambu Studio Preview screen conflicting objects vs non-conflicting objects

⚠️NOTE️️️⚠️

Doing a mesh boolean union also fixed this outer wall drawing problem.

Alternatively, an object can be loaded and combined with an existing object at the same time. In the 3D viewport, right-click the existing object to open the context menu and navigate to Add PartLoad and select the new object to combine with in the file selection dialog. The objects will be combined in the same way (as an assembly).

🔍SEE ALSO🔍

Bambu Studio Prepare screen toolbar

⚠️NOTE️️️⚠️

You can push objects into each other without putting them under the same assembly, but it'll complain during slicing.

Alternatively, two objects can be repositioned and reoriented such that they touch each other using the assembly tool (Prepare screen's toolbar button 12, keyboard shortcut Y). The assembly tool opens a pop-up used to target how and where the objects touch.

Bambu Studio Prepare screen assemble parameters

The assembly tool has two Mode options:

[src] [src]

⚠️NOTE️️️⚠️

Technically, merging into an assembly isn't required to use the assembly tool in the toolbar. But, if the intent is to stack the objects on top of each other such that one of them has a face off the build plate, it won't work (both objects will be forced back down to touch the build plate).

⚠️NOTE️️️⚠️

The mesh boolean tool (button 11, keyboard shortcut B) can be used to merge the parts of an assembly back into a single model. The mesh boolean tool takes multiple objects (e.g., parts of an assembly or multiple high-level models) and performs a boolean operation on them (e.g., union, intersect, subtraction). So, to combine an assembly to a single object, use the union option.

🔍SEE ALSO🔍

Object Painting

↩PREREQUISITES↩

In the Prepare screen's 3D viewport, selected objects can be painted by using the paint tool in Prepare screen's toolbar (button 13, keyboard shortcut N), which will present a pop-up with painting parameters / controls.

Bambu Studio Prepare screen toolbar

Bambu Studio Prepare screen painting parameters

⚠️NOTE️️️⚠️

Ensure more than 1 filament is included in the project via the Project Filaments section in the Prepare screen's left sidebar. Otherwise it'll be impossible to paint anything as there'll just be 1 color.

The remaining fields change based on which painting tool is used. When the paint tool is ...

Bambu Studio Prepare screen painting example

[src]

Object Supports

↩PREREQUISITES↩

Areas of an object that are overhangs may require supports. Supports are temporary additions added under these parts to help keep them stable during printing (e.g., prevent sagging). Supports easily snap off once the print completes.

To have Bambu Studio automatically generate supports, enable the property SupportEnable support. Supports will only be visible in the Preview screen (the screen responsible for showing slices), not this screen (Prepare screen).

Bambu Studio Prepare screen enable supports

The anatomy of a support includes ...

The subsections below discuss each of the above items in more detail.

[src] [src] [src]

⚠️NOTE️️️⚠️

What features qualify as a "critical region"? The documentation goes into further details: Cantilevers and sharp tails.

No sense going over that information here.

⚠️NOTE️️️⚠️

The documentation goes over advanced controls near the second half of the page. It might be too much detail to cover here.

Support Type

↩PREREQUISITES↩

Supports come in two types: Normal and Tree.

Bambu Studio Prepare screen support type

Each type comes in either auto mode or manual mode. When the mode is ...

🔍SEE ALSO🔍

The support's type defines the geometry generated:

⚠️NOTE️️️⚠️

See source to figure out how default switches between and organic. Out of scope for this document.

Normal supports work best with large planar overhangs, giving better surface quality vs tree supports. Tree supports often give better results with complex objects where overhang are small and / ot not planar. When in doubt, use tree supports in hybrid style, because it will explicitly check for planar overhangs and those areas to generate normal supports while the remaining areas get tree supports. [src]

Support Gaps

↩PREREQUISITES↩

The gap between supports and the printed object defines how tightly the support adheres to the object vs how easily it can be ripped off the object. Gaps are controlled through properties under SupportAdvanced:

⚠️NOTE️️️⚠️

Bottom Z distance is exclusively for supports spanning between areas of the printed object vs between build plate and object? There is no documentation for this parameter.

Support gaps diagram

Bambu Studio Prepare screen support gap properties

If these gaps are set too small, the support may be difficult to remove or even fuse to the object (unless using dedicated support material such as Support for PLA). If set too large, the overhanging surface may appear rough or sagging due to insufficient supports. For example, ...

⚠️NOTE️️️⚠️

The documentation says to treat these gap parameters not as independent parameters but as related parameters. To achieve desired results, make sure to tune them together.

[src] [src]

Support Interface

↩PREREQUISITES↩

Interface layers are support layers that touch the object, while the rest of the support body is referred to as the base. Bambu studio allows targeting specific materials for a support's base and interface. Navigate to the properties under SupportFilament for Supports. The property ...

Bambu Studio prepare screen support filaments

Additionally, properties under SupportAdvanced:

⚠️NOTE️️️⚠️

No idea how "Independent support layer height" would work given that there's asymmetry in the layer heights? Would it support layers first and then the object layers? What happens if there's a chance for collision?

Bambu Studio Prepare screen support interface properties

[src] [src]

Support Painting

↩PREREQUISITES↩

In certain cases, it's beneficial to manually specify which areas of the object to explicitly support and unsupport. Two mechanisms exist for this: painting and blockers/enforcers.

Where supports generate depends on type of supports being added (e.g. tree supports). If the type is set to ...

Bambu Studio Prepare screen support auto tree example

Bambu Studio Prepare screen support manual tree example

[src]

⚠️NOTE️️️⚠️

The example above isn't a valid print, but for some reason Bambu Studio isn't showing a warning / error popup slicing.

Raft

↩PREREQUISITES↩

A raft is a type of support that elevates an object off the build plate. Rafts are commonly used ...

🔍SEE ALSO🔍

Navigate to the properties under SupportRaft. The property ...

Bambu Studio Preview screen support raft

[src] [src]

⚠️NOTE️️️⚠️

The source mentions a couple of other parameters that are not present: First layer density and first layer expansion. I'm not sure if these have been removed, but I don't see them in my version of Bambu Studio.

Raft contact Z distance description inside Bambu Studio mentions that the parameter is ignored for "soluble interfaces". I'm not sure what that term means. Also, I don't know why there'd need to be a gap between the raft and the object? How would it stop the object from sagging if there's a gap?

Object Cutting

↩PREREQUISITES↩

In certain cases, an object may either need to be cut (e.g., oversized for printer) or may benefit from being cut (e.g., minimize need for supports or make it easier to sand/paint/finish). Cut pieces are typically assembled and fused back together after printing (e.g., glue, pen welding, joinery).

In the Prepare screen's 3D viewport, an object can be cut by selecting it and clicking cut tool in the Prepare screen's toolbar (button 10, keyboard shortcut C), which will open a pop-up, present a cutting plane in the 3D viewport, and present cutting plane rotational axis and offset height controls in the 3D viewport.

Bambu Studio Prepare screen toolbar

The cutting tool has two modes, chosen using the Mode dropdown at the top of the pop-up:

[src] [src]

⚠️NOTE️️️⚠️

The mesh boolean tool (button 11, keyboard shortcut B) can be used to merge the parts of an assembly back into a single model. The mesh boolean tool takes multiple objects (e.g., parts of an assembly or multiple high-level models) and performs a boolean operation on them (e.g., union, intersect, subtraction). So, to combine an assembly to a single object, use the union option.

Object Set Operations

↩PREREQUISITES↩

In the Prepare screen's 3D viewport, selected objects can have set operations applied (e.g., union, intersection, and subtraction) by using the mesh boolean tool in Prepare screen's toolbar (button 11, keyboard shortcut B), which present a pop-up with which which operations to apply.

Bambu Studio Prepare screen toolbar

Bambu Studio prepare screen mesh boolean parameters

The mesh boolean tool has 3 possible operations:

Regardless of which you pick, you can specify which of the selected models to apply the operation to. The resulting operation creates a single model with the chosen set operation applied (not an assembly of models, but a single model).

Given that the mesh boolean tool creates a single new model, the resulting single model typically doesn't encounter overlap issues during slicing. For example, if models aren't union'd but occupy the same space, slicing will print them as if they're distinct. That is, if two models occupy the same space, the outer shell / wall of both models will be drawn inside each other.

Bambu Studio Preview screen conflicting objects vs non-conflicting objects [src]

⚠️NOTE️️️⚠️

Merging two objects under the same assembly also fixed this outer wall drawing problem.

🔍SEE ALSO🔍

Negative Parts

↩PREREQUISITES↩

A negative part is an object that gets combined with an existing set of objects (same assembly), but it's purpose is to subtract areas of the existing objects. Any region of the existing objects that intersect with the negative part are cut out during slicing.

Bambu Studio Prepare screen negative part example Bambu Studio Preview screen negative part example

To add a negative part, right-click on an object to open the context-menu and navigate to Add negative part and select either a primitive or Load... to import a model. The negative part will be placed under an assembly along with the parts of the original object.

As shown in the screenshots above, negative parts appear slightly transparent when viewed in the Prepare screen and can be manipulated just like any other object. However, in the Preview screen, any region of the existing objects that intersect with the negative part are cut out during slicing.

⚠️NOTE️️️⚠️

This is similar to subtraction using the mesh boolean tool in the Prepare screen's toolbar. However, unlike the mesh boolean tool's subtraction, the original model being subtracted stays around and can be moved and scaled and rotated, which is useful if you want to quickly make changes after the fact.

[src]

Modifier Parts

↩PREREQUISITES↩

A modifier part is an object that gets combined with an existing set of models (same assembly), but it's purpose is to modify properties of specific areas of existing models. Any region of the existing models that intersect with the modifier part have the modifier part's properties applied.

Bambu Studio Prepare screen modifier part example Bambu Studio Preview screen modifier part example

To add a modifier part, right-click on an object to open the context-menu and navigate to Add modifier and select either a primitive or Load... to import a model. The modifier part will be placed under an assembly along with the parts of the original object.

As shown in the screenshots above, modifier parts appear gold when viewed in the Prepare screen and can be manipulated just like any other model. However, in the Preview screen, any region of the existing models that intersect with the modifier part have their properties changed to that of the modifier part (e.g., change filament color or apply fuzzy skin).

Common use cases for modifier parts include ...

⚠️NOTE️️️⚠️

There's also a related feature called a height range modifier. It adjusts based on height. For example, top of very tall models can printer slower at higher layers for stability or top heavy models can have infill density increased at lower layers to stabilize.

[src] [src]

Object Text

↩PREREQUISITES↩

Text can be placed on an object, extruded from an object, indented on to an object, or placed as a standalone extruded object on its own.

To generate text as a standalone object, in the Prepare screen's 3D viewport, click the text shape tool in the Prepare screen's toolbar (button 14, keyboard shortcut T). Text will show up in the middle of the build plate on the 3D viewport along with a pop-up where the text and its settings (e.g., font parameters) can be changed.

All parameters in the pop-up should be self explanatory, with the exception of Angle. Angle is the rotation of the text, which reflects the rotation circle in the 3D viewport.

Bambu Studio Prepare screen toolbar

Bambu Studio Prepare screen text parameters

To place text on an object, in the Prepare screen's 3D viewport, select the object and then click the text shape tool in the Prepare screen's toolbar (button 14, keyboard shortcut T). Text will show up on the object along with a pop-up where the text, its settings (e.g., font parameters), and how its placed on the object can be changed.

The parameters are the same as the parameter before, except for Mode and Operation.

Bambu Studio Prepare screen text on object parameters

[src] [src]

Object Iconography

↩PREREQUISITES↩

An SVG outline can be placed on an object, extruded from an object, indented on to an object, or placed as a standalone extruded object on its own.

To generate a standalone SVG outline, right-click on to empty space (not on an object) to open the context-menu and navigate to Add PrimitiveSVG. In the pop-up dialog that shows up, select an SVG file. The selected SVG will show up in the 3D viewport as slightly extruded (Z-scale to adjust the extrusion).

To place an SVG outline on an object, right-click on an object to open the context-menu and navigate to Add PrimitiveSVG. In the pop-up dialog that shows up, select an SVG file. The selected SVG will show up in the 3D viewport as slightly extruded (Z-scale to adjust the extrusion). The SVG wil show up on the object along with a pop-up where and how the SVG placed on the object can be changed.

Bambu Studio Prepare screen icon on object parameters

The majority of the parameters are self-explanatory.

⚠️NOTE️️️⚠️

There's some weirdness about how the icon is projected on to the surface of the object. If you have something with a curved surface (e.g., cone) and project a large icon that wraps around the cone, it only applies the part of the icon that's projected on to the viewport? If you apply it and then rotate the object, you'll see that the sides you weren't looking at didn't have the icon cut off

[src]

Layer Height

↩PREREQUISITES↩

Layer height is the height of each layer in the print. The thinner the layer, the less ridges are visible as the object is printed upwards (Z axis), meaning a smoother overall appearance.

To set the layer height globally, ensure no object is selected and navigate to the properties under QualityLayer height:

In addition, there are presets available for choosing common layer heights. These presets typically also set other other options, such as printing speeds.

Bambu Studio Prepare screen layer height parameters

⚠️NOTE️️️⚠️

Setting different layer heights for each object? You might need to print the objects individually or slicing will fail. Set OtherSpecial modePrint sequence to By object.

There might be issues where the toolhead can move depending on height of objects being printed. See here for potential way to mitigate (change print order).

⚠️NOTE️️️⚠️

There's an option here called "Mixed color sublayer" that seems to have to do with "fake color" printing where alternating real colors are banded together to generate some other color (e.g., alternating between black and white to get 50% gray). When this setting is set, it seems that the layer height is automatically cut down for coloring purposes? So if you set the layer height to 0.2mm but this option were turned on, that 0.2mm would actually be subdivided into n thinner layers? At least that's the vibe I got from https://www.reddit.com/r/BambuLab/comments/1ssuuqx/color_mixing_and_mixed_color_sublayer_wrt_layer

The initial layer height is recommended to be 50% of the nozzle's diameter. Subsequent layers are recommended to be between 20% to 70% of the nozzle's diameter. For example, if using the 0.4mm nozzle that comes with the H2S, the initial layer would be set to a layer height of 0.2mm and the remaining layers can be set to anywhere between 0.08mm to 0.28mm. This information is also available under the printer setting's Extruder section.

Bambu Studio printer settings extruder layer height limits

Variable Layer Height

↩PREREQUISITES↩

In certain cases, it's more efficient for an object's layer height to be variable. For example, consider printing a half sphere. As the layers converge to the top of the half sphere, the slope gets more and more horizontal, leading to obvious stepping.

Bambu Studio Preview screen sphere tip stepping example

One way to mitigate stepping is to set the layer height to something very small (e.g., 0.08), but doing so is inefficient as the majority of the sphere doesn't have such a problematic slope. A more appropriate way to mitigate is to use the variable layer height tool. In the Prepare screen's 3D viewport, select an object and click the variable layer tool in the Prepare screen's toolbar (button 5), which will ...

Bambu Studio Prepare screen toolbar

Bambu Studio Prepare screen variable height tool parameters

The right panel pop-up represents the layer height of the object. As the mouse scans over it bottom to top, the corresponding object in the 3D viewport should highlight indicating what portion of the object the current mouse position controls. At any height in the right panel, ...

The dialog pop-up provides functionality to algorithmically set / manipulate the variable layer height (as opposed to the manual setting happening above):

⚠️NOTE️️️⚠️

From this page:

When using variable layer height, avoid overly sharp changes in the layer height curve—meaning changes that occur too abruptly. Sudden transitions in layer height can leave visible marks or banding on the model’s surface.

As shown in the image, the left example features a steep and jagged layer height curve, which leads to noticeable surface artifacts. On the right, smoother transitions result in a cleaner and more uniform surface finish.

When applying variable layer heights, ...

⚠️NOTE️️️⚠️

What about other styles of tree supports (e.g., tree slim)? Other styles seem to not produce an error.

[src]

🔍SEE ALSO🔍

[src] [src]

Line Width

↩PREREQUISITES↩

Line width is the width of filament extruded by the nozzle during printing. To get the extruded filament to lay down either wider or thinner, the print speed changes and / or the rate at which filament is being pushed out changes (flow rate). For example, to print with a wider line width, the nozzle's head may print at the same speed but push out more filament. That is, the layer is being printed at a specific height and speed, but pushing out more filament at that layer height and speed causes that extra filament to get flattened by the nozzle's tip as it's being laid down, spreading to the desired line width.

⚠️NOTE️️️⚠️

Because having a wider line width relies on something being under the nozzle to squish against, it won't work when printing overhangs and bridges. Does this apply to overhangs and bridges that have supports? Probably, because unless you're using specific Bambu Lab filaments intended to be used as supports, there typically is both a XY-axis gap and Z-axis gap between the support and what it's supporting (with support filaments you can set these gaps to 0 but with normal filaments that gap needs to be there to make it easy to break off supports).

To set the line width, navigate to the properties under QualityLine width:

⚠️NOTE️️️⚠️

Although First layer may help with bed adhesion, it also may make elephant foot phenomenon worse? I'm not sure.

Bambu Studio Prepare screen line width parameters

The line width is recommended to be 75% to 150% of the nozzle's diameter. Otherwise, the print quality will likely be poor. For example, if using the 0.4mm nozzle that comes with the H2S, the line width should be between 0.3mm and 0.6mm.

⚠️NOTE️️️⚠️

When referring to the nozzle's diameter, it means the diameter of the channel that the filament extrudes through, referred to as the inner diameter. The outer diameter is the diameter of the wall encasing the inner diameter.

[src]

Object Seam

↩PREREQUISITES↩

A seam is a mark that shows up when the toolhead prints an enclosed path, showing up where the start and end of the path meet. The screenshot below highlights where seams will show up on an example object once printed.

Bambu Studio Preview screen object seam aligned example

There are several ways to control the appearance of seams: Algorithmic placement (e.g., hiding seams on edges), manual placement (e.g., seam painting), and specialized printing techniques (e.g., scarf seams). The subsections below detail the common methods to mitigate seams.

⚠️NOTE️️️⚠️

Although not documented in any of the subsections below, the fuzzy skin feature can also help mitigate the appearance of seams by introducing a randomly jittered textured outside.

⚠️NOTE️️️⚠️

Where as normally there's a single seam on an object, the Arachne wall generator causes multiple starts/stops per path, meaning multiple seams.

🔍SEE ALSO🔍

Algorithmic Seam Placement

Bambu Studio can algorithmically control the placement of seams in several ways. The easiest is through the QualitySeamSeam position parameter. The value ...

Bambu Studio Prepare screen seam parameters

Bambu Studio Preview screen object seam back example Bambu Studio Preview screen object seam random example Bambu Studio Preview screen object seam nearest example

[src] [src]

Seam Painting

↩PREREQUISITES↩

Similar to object painting, the placement of a seam can be painted on to the object. In the Prepare screen's 3D viewport, select the object and paint a seam by using the seam paint tool in Prepare screen's toolbar (button 17, keyboard shortcut P), which will present a pop-up with painting parameters / controls.

Bambu Studio Prepare screen toolbar

Bambu Studio Prepare screen seam painting parameters

Seam painting is operationally similar to normal object painting:

During slicing, the seam should show up in the areas painted forced / not show up in areas painted prohibited.

[src] [src]

Scarf Seam

↩PREREQUISITES↩

A scarf seam is a specialized form of seam, intended to hide its appearance for objects that are round to the point where the seam can't be hidden (e.g., sphere, cylinder, or some round object that contains no natural edge for the seam to hide). At the ...

The end result is the the start-stop region partially overlap vs a hard start-stop, blending in better.

-------------.  ,-----------
     end   ,' ,'
         ,' ,'
       ,' .'
     .' .'  
   .' .'   start
--'  '-------------

For scarf seams to be enabled, the filament being printed with must have scarf seams enabled in its filament settings: In the Prepare screen's sidebar, navigate to Project Filaments, then select the ellipsis for the desired filament and navigate to FilamentFilament scarf seam settings

Bambu Studio filament scarf seam settings

⚠️NOTE️️️⚠️

Unsure what "Contour" and "Contour and Hole" refer to? See here.

Unsure what the slope gap parameter actually does? It leaves a gap in the inner wall so the exterior wall can bleed extra material into it?

Scarf start height is the starting height that the scarf seam starts printing at, as shown in the following ASCII diagram.

-------------.  ,-----------
     end   ,' ,'
         ,' ,'
       ,'  '
     .'    | 
   .'      | start
--'        '------------------

Bambu Studio Prepare screen seam parameters

In the object's parameters, ...

[src]

Fuzzy Skin

↩PREREQUISITES↩

Fuzzy skin is a rough texture targeting the outside wall of an object and potentially holes within that object (just the walls, top and bottom surfaces won't be textured). It does this by adding random jitters to wall paths during slicing. The purpose of fuzzy skin is two-fold: It's either aesthetic, or it's intended to make the printed object easier to grip, or both.

Bambu Studio Prepare screen fuzzy skin example

Fuzzy skin parameters are under OthersSpecial mode.

Bambu Studio Prepare screen fuzzy skin parameters

To enable/disable fuzzy skin set the property Fuzzy skin to either ...

If enabled, the parameter ...

⚠️NOTE️️️⚠️

Why would you want to texture inner walls? Makes no sense? Doesn't also conflict with the infill?

[src] [src]

Fuzzy Skin Painting

↩PREREQUISITES↩

Rather than having walls be fuzzy skinned in their entirety, the object can have fuzzy skin painted on to particular areas such that only those painted areas print as fuzzy skin. In the Prepare screen's 3D viewport, select an object and click fuzzy skin painting in the Prepare screen's toolbar (button 19, keyboard shortcut H). Bambu Studio will open a pop-up and present an isolated view of the object where areas can be painted.

Bambu Studio Prepare screen toolbar

Bambu Studio Prepare screen fuzzy skin painting example Bambu Studio Preview screen fuzzy skin painting example

Tool options and controls are nearly exactly the same as those for normal object painting. Select a Tool type and the tools configuration options will show up directly underneath. Regardless of the tool type, ...

To move the viewport rather than paint (e.g., move camera, rotate camera, and zoom camera), use the same viewport controls as normal with the exception that any mouse button presses required are not on the object to be painted.

For painted fuzzy skin to be applied to the print, ensure OtherSpecial ModeFuzzy Skin is set to None(allow paint).

[src]

Skirt

↩PREREQUISITES↩

A skirt is one or more loops printed around the objects on the build plate, where there's a gap between the loops and the objects (not touching). The purpose of a skirt is to prime the nozzle. It's typically not required on the H2S because the nozzle already gets primed when a print starts by printing a small line, called a prime line.

Nevertheless, skirt loops can be enabled through the property OtherBed AdhesionSkirt loops and Skirt height. The example below has 4 loops set at a layer height of 2.

Bambu Studio Prepare screen skirt loop example

⚠️NOTE️️️⚠️

Skirt loop parameters only show up when the scope is set to global, not on an object / set of objects.

[src] [src]

Object Brims

↩PREREQUISITES↩

A brim is several outer walls added around the bottom layer of a printed object, such that the object has a bottom similar to the brim of a top hat. Its purpose is to enhance bed adhesion of objects ...

Brim parameters are under OtherBed Adhesion.

Bambu Studio Prepare screen brim parameters

The parameter ...

⚠️NOTE️️️⚠️

If gap is 0 but there's still a gap showing up between the brim and the object, it may be that QualityElephant foot compensation is non-zero. Set it to 0.

🔍SEE ALSO🔍

Bambu Studio Preview screen brim example

[src] [src]

Brim Ears

↩PREREQUISITES↩

A brim ear is a point / stretch of brim at user-defined locations around the bottom of an object. Similar to object painting, the placement of brim ears can be painted on to the object. In the Prepare screen's 3D viewport, select the object and paint brim ears by using the brim ear tool in Prepare screen's toolbar (button 18, keyboard shortcut E), which will present a pop-up with painting parameters / controls.

Bambu Studio Prepare screen toolbar

Bambu Studio Prepare screen brim ears

For brim ears to be printed, ensure OtherBed AdhesionBrim type is set to Painted. Otherwise, a warning will display at the bottom of the pop-up as shown in the example above.

To place brim ears manually, left-click around the base of the object. When a brim ear is placeable, a partially transparent brim ear will show under the mouse, notifying that a brim ear can be placed in that spot. The brim ear's size is controlled by the Head diameter parameter, which is the diameter of the brim ear in mm.

To place brim ears automatically, use the Aut-generate points button. Where brim ears get placed depends on ..

⚠️NOTE️️️⚠️

Brim ears will be invisible once exiting this tool, only being visible again when re-entering the tool on the same object or in the Preview screen post-slicing.

⚠️NOTE️️️⚠️

I found this as well: https://wiki.bambulab.com/en/software/bambu-studio/use-disc-to-avoid-warping. This seems to be doing the same thing as brim ears but its entirely manual? Maybe it was made for an older version of Bambu Studio where brim ears feature wasn't available.

[src]

Object Walls

↩PREREQUISITES↩

The number of walls printed for an object (Z axis) is set through the parameter StrengthWallsWall loops. The more walls, the stronger the print is (presumably). It's recommended that for ...

The number of solid layers for the top of the object is set through the parameter StrengthTop/bottom shellsTop shell layers. The thickness of the top shell should approximately match the thickness of the walls. For example, if the thickness of 5 walls comes out to 5mm, then the number of top shell layers should approximately come out to 5mm as well.

⚠️NOTE️️️⚠️

Prior to the top shell is the infill material. The infill material almost always has gaps, and so the that first shell layer is bridging all those gaps.

Similarly to the top shell layers, the number of solid layers for the bottom of the object is set through the parameter StrengthTop/bottom shellsBottom shell layers. It's recommended that the bottom shell have a minimum of 4 layers to ensure a sturdy and flat foundation.

⚠️NOTE️️️⚠️

Why shouldn't the bottom shell have the same thickness as the walls and top shell? Wouldn't that make more sense in that it's unified?

Bambu Studio Preview screen wall and shell parameters

⚠️NOTE️️️⚠️

There are the alternative parameters Top shell thickness / Bottom shell thickness that set using mm instead of number of layers. When set, the number of layers chosen is the maximum between Top shell layers / Bottom shell layers and the number of layers needed to match the thickness of Top shell thickness / Bottom shell thickness.

[src]

Object Infill

↩PREREQUISITES↩

While the exterior of a printed object are walls / surfaces, the interior area of is printed as an infill pattern. An infill patterns is a pattern where the user controls how densely the pattern is printed, where higher densities are typically associated with greater strength / greater load bearing capacity.

Infill parameters are found under StrengthSparse infill:

In addition to the standard infill, it's possible to specify infill patterns for the top and bottom surfaces using the parameters StrengthTop/bottom shellsTop surface pattern and Bottom surface pattern. The patterns available are more limits than the full roster of infill patterns.

⚠️NOTE️️️⚠️

Top/bottom shells also get infills at no sparsity (100% fill), called internal solid infills? The top/bottom shells don't include the top-most and bottom-most layers? So if you have 5 top shells, the 5th one (top-most) isn't internal solid infilled, but all the ones before are? That's what this is telling me.

⚠️NOTE️️️⚠️

Top/bottom surface patterns seem to only be line based infill patterns where lines don't intersect? And you can't set density? It seems to be maximum density?

What's the point of having these? I guess it has to do with the finish of the surface? I recall there was some option where you could have the heated nozzle go over the surface (without printing anything) to further smooth it out? I think it was under QualityIroning.

[src] [src]

Failure Modes

The subsections below detail how to inspect and diagnose aspects of the print.

XY Hole and Contour Fit

↩PREREQUISITES↩

Printed objects that require accurate fitting with other components (e.g., screws or other printed parts) sometimes don't fit they way they should because of variances introduced during printing. For holes and contours running running down the Z-axis, Bambu Studio provides calibration steps to compensate for these variances:

Bambu Studio Prepare screen contour hole example

The process involves printing a test object and either using calipers or a standard screw to determine how far off the hole/contour is from its intended baseline. That value can then be inserted into an object's properties under QualityPrecisionX-Y hole compensation and X-Y contour compensation.

Bambu Studio Prepare screen hole and contour compensation properties

⚠️NOTE️️️⚠️

The auto compensation option in the screenshot above disables the manual compensation fields? Description says it works with the basic set of filaments (e.g., PLA and PETG) - maybe it's good enough?

⚠️NOTE️️️⚠️

Remember that holes and contours on the z-axis are holes that are compensated for using XY hole contour compensation. It does not compensate for sideway holes.

Hole / contour compensation may be needed because ...

🔍SEE ALSO🔍

For full instructions along with what exactly to print / measure, see the source document.

[src] [src]

XY Hole and Contour Gap

↩PREREQUISITES↩

On a layer, gaps below a certain threshold are merged during slicing. This threshold is controlled via the property under QualityPrecisionSlice gap closing radius. Any gap smaller than 2x this property's value is automatically closed during slicing (e.g., if set to 0.05mm, gaps smaller than 0.1mm are closed).

Bambu Studio Prepare screen hole and contour compensation properties

Bambu Studio Preview screen closed gap example Bambu Studio Preview screen no closed gap example

In the examples above, the first screenshot has Slice gap closing radius set to 0.13mm while the second screenshot has it set to 0.02mm.

[src]

XY Hole and Contour Thinness

↩PREREQUISITES↩

By default, slicing removes or distorts areas of a contour / hole where the shape is a thin stretch, pin extrusion, or sharply acute corner. That is, if there are two points on the shape's outline with a distance less than the line width, it wouldn't be able to reliably print and so the slicer attempts to work around the "thinness" by distorting or removing it. Real world examples where this might be encountered include models containing of fan blades, thin tubes, line art, and small text.

⚠️NOTE️️️⚠️

These areas are colloquially referred to as thin walls (not to be confused for a printed object's walls), because the problematic shape often (but not always) resembles a thin wall-like structure.

Bambu Studio Prepare screen fine detail ignored example Bambu Studio Preview screen fine detail ignored example

One workaround is to narrow the line width of the entire object being printed. However, a more appropriate and efficient workaround is to set the property QualityWall generator to → Arachne. Of the two options for QualityWall generator, ...

Arachne helps mitigate the thinness problem described above at the expense of more seams. That is, where as there's typically a single seam on an object, with Arachne there may be multiple seams. Arachne starts and stops rather than pushing out a continuous stream of filament, and so each start-stop results in a seam.

⚠️NOTE️️️⚠️

There's also an option for the classic wall generator to help with this thinness problem: Detect thin wall. It seems to be more problematic to use than Arachne wall generator? See source for more information.

Bambu Studio Prepare screen Arachne properties

Once Arachne is enabled, the extra properties displayed in the screenshot above become present:

⚠️NOTE️️️⚠️

The other properties seem like advanced properties that control knobs/levers of the algorithm? It might not make sense to document them here because, even though the source documents them, they seem like internal concepts and it doesn't say what sense there is in changing them?

⚠️NOTE️️️⚠️

What happens to all the normal line width properties once Arachne is enabled? Do they just get ignored?

[src] [src]

Z Aliasing

↩PREREQUISITES↩

Objects with a contours / holes that curve on the Z-axis (e.g., sphere and donut) experience a type of artifacting called stair-stepping, where as the curve's slope aggressively becomes more and more horizontal, overtly visible steps appear between neighboring layers.

⚠️NOTE️️️⚠️

This is sometimes called Z-axis aliasing?

To mitigate stair-stepping, either ...

  1. reduce the layer height for the entire object.
  2. reduce the layer heights where stair-stepping becomes prevalent, using the variable layer height tool.
  3. set QualityAdvancedOnly one wall on top surfaces to Not Applied to reduce visible layer lines near the top surface. When set to Not Applied, the number of walls on the top surface is the same as the number of wall loops set under StrengthWallsWall loops. Effectively, it's overwriting the parameter Wall loops for the top surface to be a single wall.

Bambu Studio Preview screen Only one wall on top surfaces example

⚠️NOTE️️️⚠️

There seems to also be a hidden developer property QualityAdvancedTop area threshold that sets the threshold for what top surfaces use wall loops's count vs a single surface. I can't find this in my Bambu Studio. See https://wiki.bambulab.com/en/software/bambu-studio/parameter/quality-advance-settings.

[src] [src]

Elephant Foot

↩PREREQUISITES↩

An elephant foot is a phenomenon where the first layer of a print slightly splays out. This happens because the first layer sits on a heated build plate and doesn't appropriately cool, and so either through the non-cooling itself or through the non-cooling along with subsequent layers weighing down on it, causes the first layer to squish and splay.

Bambu website elephant foot example

Elephant foot compensation is an property, located under ProcessQualityElephant foot compensation, that shrinks the first layer. Shrinking the first layer is intended to compensate for the splaying that happens.

Bambu Studio Preview screen elephant foot compensation example

⚠️NOTE️️️⚠️

The elephant foot phenomenon isn't typically a problem unless it's preventing parts from fitting together.

⚠️NOTE️️️⚠️

Elephant foot compensation causes brims to not work properly. They shrink? For it to work properly, compensation must be turned off.

⚠️NOTE️️️⚠️

A raft can guard against the elephant foot problem?

🔍SEE ALSO🔍

[src]

Flow Dynamics

↩PREREQUISITES↩

Flow dynamics calibration compensates for lags in extrusion. These lags are a result of nozzle pressurization: When filament is extruded, it takes time for pressure in the nozzle to build up to a level where plastic flows consistently. When the toolhead ..

Flow dynamics attempts to compensate for the problems above by preemptively adjusting filament flow. This compensation improves print quality, especially when printing complex shapes at higher printing speeds (e.g., cleaner corners and sharper details).

Bambu website good vs poor flow dynamics example

Flow dynamics calibration should be performed whenever ...

While some other Bambu Lab printers have automatic flow dynamics calibration (e.g., H2D), the H2S require manual calibration. The steps for manual flow dynamics calibration are as follows:

  1. Ensure the filament is dry / fresh and the nozzle has no blockages.

    Filaments should always be dry when printing. Damp filaments will render the calibration results unsuitable for use with fresh filament.

  2. Ensure build plate is of correct type and clean.

  3. Navigate to the Calibration page, select Flow Dynamics in the sidebar, and then click the Manual Calibration button at the bottom of the main page. It should switch the page to a Flow Dynamics Calibration page with input fields.

  4. On the Flow Dynamics Calibration page, select the appropriate options and parameters, then click Calibrate. Printing of a test pattern should start once Calibrate is clicked.

  5. Once the test pattern has finished printing, visually inspect and find the number corresponding to the cleanest printed corner.

    There should be numbers running down the right-hand side and 90 degree corners which those numbers correspond to on the left-hand side. Find the number with the cleanest / sharpest corner, where the corner has the least bulging or fraying.

Bambu website flow dynamics print example

  1. On the Flow Dynamics Calibration page, click Next. It should switch to page asking for Factor K. Input the found number from the previous step and click Finish.

[src]

Flow Ratio

↩PREREQUISITES↩

Flow ratio is a scaling factor that adjusts the actual amount of filament extruded vs the theoretical amount calculated by the slicer. The flow ratio helps mitigate problems with over-extrusion and under-extrusion.

Bambu website over under extrusion examples

⚠️NOTE️️️⚠️

From the source:

Different materials have varying melting properties, flowability, and shrinkage rates, so the optimal Flow Ratio required for each material differs. For example:

While some other Bambu Lab printers have automatic flow ratio calibration (e.g., X1), the H2S require manual calibration. The steps for manual flow dynamics calibration are as follows:

⚠️NOTE️️️⚠️

The website recommends to perform flow ratio calibration after dynamic flow calibration, but doesn't dynamic flow calibration depend on the flow ratio? Shouldn't this be the other way around?

  1. Ensure the filament is dry / fresh and the nozzle has no blockages.

    Filaments should always be dry when printing. Damp filaments will render the calibration results unsuitable for use with fresh filament.

  2. Ensure build plate is of correct type and clean.

  3. Navigate to the Calibration page, select Flow Rate in the sidebar, and then click the Manual Calibration button at the bottom of the main page. It should switch the page to a Flow Rate page with input fields.

  4. On the Flow Rate Calibration page, select the appropriate options and parameters, then click Calibrate. Printing of a test pattern should start once Calibrate is clicked.

  5. Once the test pattern has finished printing, visually inspect and find the number corresponding to the smoothest surface.

    There should be numbers on each tab printed. View under side lighting and find the number with the cleanest surface, where there is no bulging or indents.

    Bambu website flow ratio print example

    ⚠️NOTE️️️⚠️

    The pictures above are from the Bambu Lab wiki, and they show that 5 is actually better than 0. That's why they're recommending a side lighting? So the indents / bulges are more visible.

  6. On the Flow Rate Calibration page, click Next. It should switch to page asking for the number with the smoothest top. Input the found number from the previous step and click Calibrate. Printing of a second test pattern should start once Calibrate is clicked.

  7. Once the test pattern has finished printing, visually inspect and find the number corresponding to the smoothest surface.

    There should be numbers on each tab printed. View under side lighting and find the number with the cleanest surface, where there is no bulging or indents.

    Bambu website flow ratio print example 2

  8. On the Flow Rate Calibration page, click Next. It should switch to page asking for the number with the smoothest top. Input the found number from the previous step and click Finish.

[src]

Slicer Diagnostics

↩PREREQUISITES↩

The slicer output shown in the Preview Screen helps identify problems prior to printing.

Bambu Studio Preview screen 3D viewport example

Of the Color schemes available, the following ones help highlight problems:

These color schemes can help diagnose issues before printing:

For more information, see the source.

[src]

FreeCAD

FreeCAD is a parametric 3D computer-aided design / modeling tool. It contains different segments of functionality, referred to as workbenches. Each workbench targets a different aspect of the overall design workflow (e.g., sketching, turning sketches into 3D objects, and assembling 3D objects together).

The following subsections give a basic overview and usage reference for the subset of workbenches related to 3D printing.

⚠️NOTE️️️⚠️

This section assumes you have past experience with some 3D editors.

User Interface Layout

FreeCAD UI layout

Regardless of which workbench you're in, FreeCAD's UI will likely have the sections highlighted in the screenshot above. Almost everything in the toolbar can also be accessed via the main menu and triggered via a keyboard shortcut.

⚠️NOTE️️️⚠️

When in doubt, click the button immediately to the right of 3 (pointer with a question mark) and select something to learn more about it.

⚠️NOTE️️️⚠️

If something is missing from your toolbar, navigate to ViewToolbars and enable as needed.

Viewport

Document hierarchy / operations

Basic operations

[[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Spreadsheet Workbench

FreeCAD has a built-in spreadsheet and expression engine, accessible through the spreadsheet workbench. A spreadsheet is typically used to store parameters and run formulas, which then go on to be used as the parameters of geometry and other properties of an object. It can also go the other way, pulling data out of a model into a spreadsheet.

⚠️NOTE️️️⚠️

The entire section assumes the reader has prior experience with other spreadsheet engines (e.g., Excel).

User Interface

↩PREREQUISITES↩

FreeCAD spreadsheet UI layout

Basic operations

Viewport

Cell operations and properties

[src]

Cell Types

↩PREREQUISITES↩

A cell's contents may be ...

FreeCAD spreadsheet cell examples

As shown in the example above, formulas are unit-aware (e.g., a formula can add two angles together or two distances together). The cell displays the results in the user's desired unit system (e.g., imperial vs metric).

🔍SEE ALSO🔍

[src]

Expressions

In addition to being set to literals, spreadsheet cells and other properties may also be set to expressions. An expression executes some piece of logic using basic operators, functions, constants, conditionals, and references to other properties (e.g., other cells or data within a model). Operators and functions are unit-aware, requiring a valid combinations of units if supplied. For example, 2mm + 4mm is valid while 2mm + 4 is not. This also applies to references to properties that have units (e.g., Pad001.Length + 1 isn't valid because it adds a pure number to a property containing a length - it requires Pad001.Length + 1mm).

Units

Numbers in an expression may optional have a unit. The following tables contain the unit designations recognized by FreeCAD when inserting a unit (e.g., 5 mm). The following tables were pulled directly from source.

Angle

Unit Description
° Degree; alternative to the unit deg
deg Degree; alternative to the unit °
rad Radian
gon Gradian
M Minute of arc; alternative to the unit
Minute of arc; this is the prime symbol (U+2032); alternative to the unit M
S Second of arc; DOES NOT WORK; alternative to the unit
Second of arc; this is the double prime symbol (U+2033); alternative to the unit S

Length

Unit Description
nm Nanometer
um Micrometer; alternative to the unit µm
µm Micrometer; alternative to the unit um
mm Millimeter
cm Centimeter
dm Decimeter
m Meter
km Kilometer
mil Thousandth of an inch; alternative to the unit thou
thou Thousandth of an inch; alternative to the unit mil
in Inch; alternative to the unit "
" Inch; alternative to the unit in
ft Foot; alternative to the unit '
' Foot; alternative to the unit ft
yd Yard
mi Mile

[src]

Property Access

↩PREREQUISITES↩

An expression can reference properties of other objects by referencing the path hierarchy. For example, if there's a diameter named (diameter constraint) lower_initial_diam within a sketch ...

⚠️NOTE️️️⚠️

To see the ID of objects, right click in the Model pane and navigate to Tree SettingsShow Internal Name.

⚠️NOTE️️️⚠️

If using labels, the label must be unique.

⚠️NOTE️️️⚠️

To reference a object (such as Sketch / my_sketch in the example), you must use the _self property. For example, !!Sketch!!._self.

[src]

Index Access

↩PREREQUISITES↩

To reference an item in a list or tuple, use the [] operator. For example, !!Sketch!!.!!Constraints!![0] will pull the first constraint within the sketch object.

To reference an enumeration option's text, use the [] operator in addition to referencing the enumeration option itself. For example, Pad.Type.Enum[Pad.Type] will pull out the text for Pad.Type, while Pad.Type itself will only return it's index within the enumeration.

[src]

Conditionals

Conditional expressions use C++ style ternary operator syntax: condition ? resultTrue : resultFalse. The condition is defined as an expression that evaluates to either 0 (false) or non-zero (true).

⚠️NOTE️️️⚠️

Any value is evaluated as zero if abs(value) < 1e-7, else it is evaluated as non-zero.

⚠️NOTE️️️⚠️

In FreeCAD 1.1, you can test a boolean directly (e.g., VarSet.MyBool ? 10 : 15) where as in older versions of FreeCAD need a relational operator (e.g., VarSet.MyBool == 1 ? 10 : 15).

[src]

Operators

Table pulled directly from source.

Operator Description
+ Addition
- Subtraction
* Multiplication
/ Floating point Division
% Remainder
^ Exponentiation
== Equal
!= Not equal
> Greater than
>= Greater than or equal to
< Less than
<= Less than or equal to

⚠️NOTE️️️⚠️

From the source:

Some unit related errors can seem unintuitive, with expressions either being rejected or producing results that do not match the units of the property being set. Here are some examples:

1/2mm is not interpreted as half a millimeter but as 1/(2mm), resulting in: 0.5 mm^-1.

sqrt(2)mm is not valid because the function call is not a number. This has to be entered as sqrt(2) * 1mm.

[src]

Constants

Constant Description
e Euler's number
pi Pi

[src]

Functions

FreeCAD expressions support several built-in functions. The following sections each contain a subset of useful functions pulled directly from the source documentation.

⚠️NOTE️️️⚠️

From the source:

Some unit related errors can seem unintuitive, with expressions either being rejected or producing results that do not match the units of the property being set. Here are some examples:

1/2mm is not interpreted as half a millimeter but as 1/(2mm), resulting in: 0.5 mm^-1.

sqrt(2)mm is not valid because the function call is not a number. This has to be entered as sqrt(2) * 1mm.

[src]

Trigonometry

Table pulled directly from source.

Function Description Input range
acos(x) Arc cosine -1 <= x <= 1
asin(x) Arc sine -1 <= x <= 1
atan(x) Arc tangent, return value in the range -90° < value < 90° all
atan2(y; x) Arc tangent of y/x accounting for quadrant, return value in the range -180° < value <= 180° all, the invalid input x = y = 0 returns 0
cos(x) Cosine all
cosh(x) Hyperbolic cosine all
sin(x) Sine all
sinh(x) Hyperbolic sine all
tan(x) Tangent all, except x = n*90 with n = odd integer
tanh(x) Hyperbolic tangent all
hypot(x; y) Pythagorean addition (hypotenuse), e.g. hypot(4; 3) = 5 x and y >= 0
cath(x; y) Given hypotenuse, and one side, returns other side of triangle, e.g. cath(5; 3) = 4 x >= y >= 0

[src]

Rounding

Table pulled directly from source.

Function Description Input range
abs(x) Absolute value all
ceil(x) Ceiling function, smallest integer value greater than or equal to x all
floor(x) Floor function, largest integer value less than or equal to x all
mod(x; y) Remainder after dividing x by y, sign of result is that of the dividend all, except y = 0
round(x) Rounding to the nearest integer all
trunc(x) Truncation to the nearest integer in the direction of zero all

[src]

Boolean Logic

Table pulled directly from source.

Function Description Input range
and(a; b; c; ...) AND: 1 if abs of all arguments is greater than or equal to 1e-7, else 0 all
or(a; b; c; ...) OR: 0 if abs of all arguments is less than 1e-7, else 1 all
not(a) Negation: 1 if abs(a) is less than 1e-7 else 0 all

[src]

Statistics Operations

Table pulled directly from source.

Function Description Input range
average(a; b; c; ...) Average value of the arguments, same as sum(a; b; c; ...) / count(a; b; c; ...) all
count(a; b; c; ...) Count of the arguments, typically used for cell ranges all
max(a; b; c; ...) Maximum value of the arguments all
min(a; b; c; ...) Minimum value of the arguments all
stddev(a; b; c; ...) Standard deviation of the values of the arguments all
sum(a; b; c; ...) Sum of the values of the arguments, typically used for cell ranges all

[src]

Object Creation

Table pulled directly from source.

TypeFunctionDescription
Tuple tuple(a; b; ...) Example: tuple(2; 1; 2)
List list(a; b; ...) Example: list(2; 1; 2)
Vector vector(x; y; z) Create a vector using three unit-less or Length unit values.

Example: vector(2; 1; 3)

create(<<vector>>; x; y; z)
Matrix
matrix(
  a11; a12; a13; a14;
  a21; a22; a23; a24;
  a31; a32; a33; a34;
  a41; a42; a43; a44
)
Create a 4x4 matrix in row-major order:

[a11a12a13a14a21a22a23a24a31a32a33a34a41a42a43a44]

A minimum of 1 argument can be supplied such as matrix(1) which creates an identity matrix.

Example: matrix(1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16)

create(<<matrix>>; a11; a12; ...; a44)
Rotation rotation(axis; angle) Create a Rotation by specifying its axis (Vector) and angle (Angle unit or unit-less), or three Euler angles α, β, γ.

Examples:

  • rotation(vector(0; 1; 0); 45)
  • create(<<rotation>>; 30; 30; 30)
rotation(α; β; γ)
create(<<rotation>>; axis; angle)
create(<<rotation>>; α; β; γ)
Placement placement(base; rotation) Create a Placement with various parameters, including:
  • base: base location (Vector)
  • center: center location (Vector)
  • rotation: Rotation
  • axis: Rotation axis (Vector)
  • angle: Rotation angle (unit-less or Angle unit value)
  • matrix: Matrix

Examples:

  • placement(vector(2; 1; 3); rotation(vector(0; 0; 1); 45))
  • create(<<placement>>; create(<<vector>>; 2; 1; 2); create(<<rotation>>; create(<<vector>>; 0; 1; 0); 45))
placement(base; rotation; center)
placement(base; axis; angle)
placement(matrix)
create(<<placement>>; ...)

[src]

String Operations

Function / Operator Description
a+b Concatenate strings a and b together.
str(a) Convert a into a string.
<> Generate a string literal.

Strings can also be created via string interpolation using the old Python % syntax for string formatting. For example, <<Cube length is %s and width is %s>> % tuple(Box.Length; Box.Width).

[src]

Vector Operations

Function / Operator Description
vector(x; y; z) Create vector vectors.
v1 + v2 Add two vectors.
v1 - v2 Subtract two vectors.
v * s Uniformly scale a vector by s.
vangle(v1; v2) Angle between two vectors in degrees.
vcross(v1; v2) Cross product of two vectors v1×v2.
v1 * v2 Dot product of two vectors v1⋅v2.
vdot(v1; v2) Dot product of two vectors v1⋅v2.
vlinedist(v1; v2; v3) Distance between vector v1 and a line through v2 in direction v3.
vlinesegdist(v1; v2; v3) Distance between vector v1 and the closest point on a line segment from v2 to v3.
vlineproj(v1; v2; v3) Project vector v1 on a line through v2 in direction v3.
vnormalize(v) Normalize a vector to a unit vector.
vplanedist(v1) Distance between vector v1 and a plane defined by a point v2 and a normal v3.
vplaneproj(v1) Project vector v1 on a plane defined by a point v2 and a normal v3.
vscale(v; sx; sy; sz) Non-uniformly scale a vector by sx in the X direction, sy in the Y direction, and sz in the Z direction.
vscalex(v; sx) Scale a vector by sx in the X direction.
vscaley(v; sy) Scale a vector by sy in the Y direction.
vscalez(v; sz) Scale a vector by sz in the Z direction.
Matrix Operations

Rotation and Placement can each be represented by a Matrix. The following functions all take in a Matrix, Rotation, or Placement as their first parameter denoted in the table below by m. The type of the returned object is the same as the object supplied in the first argument except when using mtranslate on a Rotation, in which case a Placement will be returned.

Function Description
matrix(
a11; a12; a13; a14;
a21; a22; a23; a24;
a31; a32; a33; a34;
a41; a42; a43; a44
)
Create matrix.
minvert(m) Calculate the inverse matrix.
mrotate(m; rotation)
mrotate(m; axis; angle)
mrotate(m; α; β; γ)
Rotate by either a Rotation, an axis (Vector) and an angle (Angle unit or unit-less), or three Euler angles α, β, γ.
mrotatex(m; angle) Rotate around the X axis.
mrotatey(m; angle) Rotate around the Y axis.
mrotatez(m; angle) Rotate around the Z axis.
mtranslate(m; vector)
mtranslate(m; x; y; z)
Translate by a vector (Vector) or X, Y, Z values. If a Rotation is translated, the returned object is a Placement.
mscale(m; vector)
mscale(m; x; y; z)
Scale by a vector (Vector) or X, Y, Z values.
vlinedist(v1; v2; v3) Distance between vector v1 and a line through v2 in direction v3.
vlinesegdist(v1; v2; v3) Distance between vector v1 and the closest point on a line segment from v2 to v3.
vlineproj(v1; v2; v3) Project vector v1 on a line through v2 in direction v3.
vnormalize(v) Normalize a vector to a unit vector.
vplanedist(v1) Distance between vector v1 and a plane defined by a point v2 and a normal v3.
vplaneproj(v1) Project vector v1 on a plane defined by a point v2 and a normal v3.
vscale(v; sx; sy; sz)
vscalex(v; sx)
vscaley(v; sy)
vscalez(v; sz)
Non-uniformly scale a vector by sx in the X direction, sy in the Y direction, and sz in the Z direction.

Sketcher Workbench

Sketcher workbench allows creating 2D sketches. These 2D sketches typically go on to by used by other workbenches (e.g., they define the outline of some 3D feature in the creation of models via the part design workbench).

Sketcher workbench has the following core primitives:

In the screenshot below, the red geometry are visualizations of constraints (e.g., angle and radius), while the white lines are the geometric primitives those red lines apply to (e.g., arc).

FreeCAD sketcher workbench simple arc sketch

There are different element types (e.g., construction geometry, projection geometry) and different constraint types (e.g., reference constraints, driving constraints). These are documented in the subsections below.

User Interface

↩PREREQUISITES↩

FreeCAD sketcher workbench UI layout

The Sketcher workbench has two modes: Editing a sketch or viewing a sketch. The toolbar buttons change depending on the mode. The UI layout shown in the screenshot above is when editing a sketch, which is the mode that users will spend most of their time in.

⚠️NOTE️️️⚠️

The behavior of many of the UI controls highlighted above / documented below changes based on the state of the application. For example, ...

These nuances aren't captured here, but in sections later on. This is just a basic accounting of the UI controls.

General Commands

Elements and Constraints

B-Splines

Tools

Panels

[src]

Sketching

↩PREREQUISITES↩

Sketching involves creating elements, constraining them, and deleting them. The sketch below is a non-trivial set of elements chained together using constraints.

FreeCAD sketcher workbench example

The subsections below document these basic concepts.

[src]

Creation

FreeCAD sketcher workbench elements and constraints toolbar

To create an element, select the element from the toolbar (or the main menu, or use the element's shortcut key) and click on the viewport multiple times. For most elements, on the first click the viewport should show that the item is being created, and the movement of the mouse button and subsequent clicks further constructs the element. For example, to add a line, select the line in the toolbar, click in the viewport, and slightly move the mouse. The line's preview will display.

FreeCAD sketcher workbench line preview

A subsequent click will be complete adding the line.

FreeCAD sketcher workbench line complete

In the preview, there are two textboxes, one that specifies a distance and one that specifies an angle. These are referred to as On-View-Parameters, and they're available for certain elements, When in preview, pressing Tab will cycle into these textboxes, where a value may be entered followed by pressing Enter. Using them adds constraints to line. For example, if used for the line above, a constraint is added for the line's length and another constraint is added for the line's angle from the horizontal axis.

FreeCAD sketcher workbench line complete constrained

Alternatively, an element can have constraints added to it by selecting the relevant portions of an element and clicking an applicable constraint. For example, the line can have the exact same constraints applied by ...

FreeCAD sketcher workbench line complete constrained toolbar constraints

🔍SEE ALSO🔍

⚠️NOTE️️️⚠️

There are multiple ways to apply constraints, discussed in each constraint's source. For example, instead of first selecting the line and then choosing the distance dimension constraint, you can first make sure nothing is selected, then click the distance dimension constraint, then click the line.

[src]

Continue Mode

Continue mode allows element / constraint creation to continue after an element / constraint is created, allowing multiple such elements / constraints to be created many times over. The creation tool remains active until the user hits Esc or selects some other tool from the toolbar. For example, after selecting the line element from the toolbar and creating a line on the sketch, more lines can be created on the sketch without having to click the line element again in the toolbar.

⚠️NOTE️️️⚠️

Pressing Esc if no tool is active will exit sketch edit mode. This can be turned off in preferences if inadvertently pressing Esc too many times.

Continue mode can be turned off in preferences (on by default).

[src]

On-View-Parameters

For certain element creation tools, On-View-Parameters allows explicitly adding constraints during the creation process by presenting input fields alongside the element's preview. For example, dropping a line will show a textbox for length constraint and a textbox for angle constraint. Pressing tab cycles through these textboxes, while pressing enter adds the constraints.

Continue mode can be turned off and configured in preferences (on by default).

[src]

Auto Constraints

When creating an element, if the placement of some part of that element ends on an existing element, an auto constraint may be applied. An auto constraint is a constraint that's automatically added by virtue of how the elements end up together. For example, if the end of a line ends up on the start of a line, auto constraint will add a constraint known as coincident constraint which bounds those two points together.

When an auto constraint is to be applied, the icon of the constraint is shown on the lower right of the icon of the element being created.

⚠️NOTE️️️⚠️

I can't do a screenshot of this because flameshot won't capture the mouse cursor, but just imagine that you're creating a line. The mouse cursor will have the icon of the line creation icon (same as the toolbar) next to it. As you're putting down the line, when you get close to the existing line's point, a second smaller icon showing the constraint to be added show up to the right of the line creation icon. That second smaller icon is the coincident constraint icon.

Auto constraints is enabled/disabled per sketch, not globally. To change, update in the constraints pane or the sketch's view Autoconstraints property.

FreeCAD sketcher workbench auto constraints toggle

[src]

Selection

↩PREREQUISITES↩

Elements and constraints can be selected in any of the following ways:

[src]

Deletion

↩PREREQUISITES↩

To delete an element or constraint, select it and hit the Delete key. If an element is deleted, its related constraints are automatically deleted as well, even if they were left unselected when the Delete key was hit.

[[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Constraint Expressions

↩PREREQUISITES↩

Constraints can be named by either ...

FreeCAD sketcher workbench constraint name and value dialog

Constraints can also reference and calculate their values via expressions. The formula button (inside the value textbox, to its right) opens an Expression Editor window that allows entering an expression instead of a constant, similar to inserting a formula in a cell for a spreadsheet.

FreeCAD sketcher workbench expression editor dialog

The expression can access data in the sketch (e.g., other constraints) as well as outside the sketch (e.g., alias in a spreadsheet or field in a VarSet). In the example, the constraint is copying the value of another constraint and multiplying it by 2.

[[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Projection Geometry

↩PREREQUISITES↩

An element is deemed projection geometry if that element was pulled in from a 3D object visible from the sketch. Projection geometry is linked to the 3D object it came from.

⚠️NOTE️️️⚠️

Although not discussed yet, 3D objects can come from a variety of different places. For example, a sketch may be turned into 3D objects / 3D features on an existing 3D object via the part design workbench, and subsequent sketches may project geometry from that object.

FreeCAD sketcher workbench external geometry toolbar buttons

To project, select the External Projection toolbar button (keyboard shortcut G, X) and select until the all desired elements have been projected (Esc or select another tool to exit). In some cases, it may be difficult to select the desired external geometry (e.g., it may be on the opposite side of the object, hidden from view). Recall that the camera can be rotated while sketching. If rotated, the camera's rotation can be brought back inline with the sketch by clicking the Align View to Sketch toolbar button (keyboard shortcut Q, P): FreeCAD sketcher workbench align view to sketch toolbar button.

FreeCAD sketcher workbench projection geometry example

To project intersections with the sketching plane, select the External Intersection toolbar button (keyboard shortcut G, I) and select until all desired elements have been projected (Esc or select another tool to exist). In most cases, it's difficult to select the desired intersections because they're likely blocked from view. Recall that the Toggle Section View toolbar button (keyboard shortcut Q, S) will temporarily cut from view anything that extends past the sketch plane towards the camera: FreeCAD sketcher workbench toggle section view toolbar button.

FreeCAD sketcher workbench projection geometry intersection example

⚠️NOTE️️️⚠️

When experimenting, I found pulling in intersections to be finicky. Certain curvatures won't get pulled in, or will get pulled in as only a single point off the curvature. It might be that not all conics are supported? Or maybe the feature is just buggy.

⚠️NOTE️️️⚠️

Projected geometry may also be construction geometry, discussed in sections further one.

🔍SEE ALSO🔍

The color and line style changes based on the type of projected element and the state of the overall sketch. The screenshot below shows the default colors used by FreeCAD for the various types and states.

FreeCAD Sketcher workbench element colors

[src] [src] [src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Construction Geometry

↩PREREQUISITES↩

An element is deemed as construction geometry if it isn't exposed to consumers of the sketch (it's internal to the sketch, hidden once the sketch is closed). Construction geometry is used within the sketch to assist in constraining other geometry.

Construction geometry comes in different forms:

To toggle one or more elements to / from construction geometry, select the elements and click the toggle construction geometry button (keyboard shortcut G,N): FreeCAD sketcher workbench toggle construction geometry toolbar button

To toggle element creation from / to construction geometry, ensure nothing is selected and click te toggle construction geometry button. Toolbar buttons to create elements will change color to indicate that elements being created are construction geometry.

FreeCAD sketcher workbench construction geometry toggled off toolbar buttons

FreeCAD sketcher workbench construction geometry toggled on toolbar buttons

The color and line style changes based on the type of construction element and the state of the overall sketch. The screenshot below shows the default colors used by FreeCAD for the various types and states.

FreeCAD Sketcher workbench element colors

[src] [src] [src] [src] [src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Degrees of Freedom

↩PREREQUISITES↩

If an element ...

A degree of freedom is a parameterization that hasn't been set. For example, ...

The overall constraint state for all elements in the sketch is shown in the Sketch Edit pane.

⚠️NOTE️️️⚠️

There are other messages, but they usually mean something critical has gone wrong (e.g., Malformed constraints, Solver failed to converge).

It is important that a completed sketch always be fully constrained, otherwise the solver (software responsible for applying constraints) may shift and reorient the elements on that sketch based on the what is and isn't constrained. Even if a sketch is fully constrained, it may still be subject to sketch flipping, a phenomenon where the sketch changes because even when fully constrained there is more than 1 possible outcome for the constraints. In the example below, both arcs have the exact same constraints (both fully constrained), but there are two possible solutions.

FreeCAD sketcher workbench two solutions for the same constrained arc example

🔍SEE ALSO🔍

[src] [src] [src] [src] [src] [src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Sketch Flipping

↩PREREQUISITES↩

Even if a sketch is fully constrained, it may still be subject to sketch flipping, a phenomenon where the sketch reshapes because even when fully constrained there is more than 1 possible outcome for the constraints.

To prevent flipping, it's important to anchor the sketch using constraints that support directionality. In general ...

[src] [src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

3D Feature Validity

↩PREREQUISITES↩

⚠️NOTE️️️⚠️

The word contour here just means the outline of a shape that you draw in the sketcher. It doesn't have the same special meaning as the contours vs holes meaning in Bambu Studio.

For a sketch to be valid for use as a 3D feature (e.g., as a profile that extrudes into a 3D addition or punches into a 3D face), it must conform to several expectations:

Contours are allowed to be nested (but not intersecting). Nesting alternates between creating voids in the 3D feature.

FreeCAD sketcher workbench nested contours example FreeCAD part design workbench nested contours padded example

⚠️NOTE️️️⚠️

These rules don't apply to construction geometry because construction geometry doesn't appear outside of editing a sketch.

[src]

Elements

↩PREREQUISITES↩

An element is a 2D geometric primitive (e.g., point, line, arc, and spline). The element itself defines a primitive, while the parameterization of the primitive are defined by constraints applied to the element (constraints are discussed in later sections).

🔍SEE ALSO🔍

The subsections below detail the various elements available.

[src]

Point

↩PREREQUISITES↩

FreeCAD sketcher workbench numbered element toolbar buttons

To create a point, use toolbar button 1 (keyboard shortcut G,Y) and click within the 3D viewport to place the point.

[src]

Line

↩PREREQUISITES↩

FreeCAD sketcher workbench numbered element toolbar buttons

To create a line, use toolbar button 3 (keyboard shortcut G,L). Once the tool is active, select the mode in which the line should be created (cycle keyboard shortcut M). The mode defines the constraints presented by On-View-Parameters when the line is being created:

FreeCAD sketcher workbench line parameters

Click within the 3D viewport to place the element and either fill out the On-View-Parameters or click again to place the second point.

⚠️NOTE️️️⚠️

A line is made up of 2 points.

[src]

Rectangle

↩PREREQUISITES↩

FreeCAD sketcher workbench numbered element toolbar buttons

To create a rectangle, use toolbar button 6 to present a drop-down and either select ...

The selection activates the tool with specific Rectangle Parameters preset. Those parameters can continue to be set once the tool is active:

FreeCAD sketcher workbench rectangle parameters

Click within the 3D viewport to place the element and either fill out the On-View-Parameters or click until placement is complete.

⚠️NOTE️️️⚠️

A rectangle is made up of at least 4 lines. 4 more added if it's framed. 4 arcs added if it's rounded.

[src] [src] [src]

Polygon

↩PREREQUISITES↩

FreeCAD sketcher workbench numbered element toolbar buttons

To create a polygon, use toolbar button 7 to present a drop-down and either select ...

⚠️NOTE️️️⚠️

Triangle is an equilateral triangle.

Except for Polygon, the selection activates the tool with specific Polygon Parameters preset. Those parameters can continue to be set once the tool is active:

FreeCAD sketcher workbench polygon parameters

Click within the 3D viewport to place the element and either fill out the On-View-Parameters or click until placement is complete.

⚠️NOTE️️️⚠️

A polygon is made up of n lines and a circle (construction geometry).

[src] [src] [src] [src] [src] [src] [src]

Circle Ellipse

↩PREREQUISITES↩

FreeCAD sketcher workbench numbered element toolbar buttons

To create an ellipse or circle, use toolbar button 5 to present a drop-down and either select ...

Once the tool is active, select the mode in which the line should be created (cycle keyboard shortcut M). The mode defines the constraints presented by On-View-Parameters when the line is being created:

FreeCAD sketcher workbench circle parameters FreeCAD sketcher workbench ellipse parameters

Click within the 3D viewport to place the element and either fill out the On-View-Parameters or click until placement is complete.

[src] [src] [src] [src]

Arc

↩PREREQUISITES↩

FreeCAD sketcher workbench numbered element toolbar buttons

To create an arc, use toolbar button 4 to present a drop-down and either select ...

Of the options, ...

Click within the 3D viewport to place the element and either fill out the On-View-Parameters or click until placement is complete.

[src] [src] [src] [src] [src]

Polyline

↩PREREQUISITES↩

FreeCAD sketcher workbench numbered element toolbar buttons

A polyline is a helper that chains together lines and arcs into a path. To create a polyline use toolbar button 2 (keyboard shortcut G,M). Then, either select where to drop the first point or click an existing endpoint. Continue clicking to place new segments in a chain, hitting M to cycle through the line and arc options:

Click within the 3D viewport to place the element and continue clicking to draw. Hit Esc to end.

There must be a previous segment for M to cycle through line and arc options (there will be if you dropped on an existing endpoint). For the initial segment, the mode is always hardcoded to a line (M won't cycle).

[src]

Slot

↩PREREQUISITES↩

FreeCAD sketcher workbench numbered element toolbar buttons

To create a slot, use toolbar button 8 to present a drop-down and either select ...

Slot and Arc Slot are different tools. When ...

Click within the 3D viewport to place the element and either fill out the On-View-Parameters or click until placement is complete.

[src] [src]

B-Spline

↩PREREQUISITES↩

FreeCAD sketcher workbench numbered element toolbar buttons

To create a b-spline, use toolbar button 9 to present a drop-down and either select ...

The selection activates the tool with specific Rectangle Parameters preset. Those parameters can continue to be set once the tool is active:

FreeCAD sketcher workbench b-spline parameters

Click within the 3D viewport to place the element and either fill out the On-View-Parameters or click until placement is complete. Hit Esc to end.

There are various b-spline modifiers / helpers:

FreeCAD sketcher workbench b-spline modifiers

There are various visual helpers for b-splines that can be enabled / disabled:

FreeCAD sketcher workbench b-spline visual helpers

[src] [src] [src] [src]

Constraints

↩PREREQUISITES↩

A constraint limits the possible values for an element's parameters. For example, a line may have an endpoint constrained onto the X-axis, in which case the position of that endpoint must always have a Y position of 0.

🔍SEE ALSO🔍

The subsections below detail the various constraints available.

[src]

Distance Dimension

A Distance Dimension constraint sets the distance.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Distance Dimension constraint, select the element (e.g., line), elements (e.g., line and arc), or element components (points on a line). Then, use toolbar button 1 to present a drop-down and select Distance Dimension (keyboard shortcut K,D). A pop-up will ask for the length value. Once the constraint has been created, press Esc to exit.

Distance Dimension works on the elements most users expect (e.g., distance between two points, distance of a line). It also works on other elements. For example, Distance Dimension can be applied to point and a line, an arc, two circles / arcs, a line and a circle / arc,

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that breaks down in certain cases. For example, ...

For the last point, as soon as you click the line, the constraint will get triggered on the line.

To work around this, click the line and arc first, then select Distance Dimension.

By definition, a distance must be a non-negative value. Imagine two points on a horizontal line A and B. The distance between (A,B) is the same as the distance between (B,A). For example, if A=5 and B=4, ...

Given this, it's important to remember that distance does not encode a direction (e.g., if it did, the abs would go away, meaning the distance from B to A would have been -1 instead of 1). This lack of direction means that the sketcher's solver can decide to flip sketches even if the sketch is fully constrained (unless it's somehow further constrained to define a direction). For example below, the rectangle below has two distance constraints, ...

FreeCAD sketcher workbench rectangle with distance dimensions

Because distance doesn't encode direction, the sketcher can decide to flip the horizontal edges or the vertical edges at any time. Imagine taking the lower-right corner of this rectangle and using a coincident constraint to tie it to the origin. Because the edges can flip, at any time the lower-right corner can become the upper-right corner, upper-left corner, or lower-left corner.

FreeCAD sketcher workbench rectangle with distance dimensions flip 1 FreeCAD sketcher workbench rectangle with distance dimensions flip 2

⚠️NOTE️️️⚠️

To avoid sketch flipping, you need to add additional constraints that support directionality.

🔍SEE ALSO🔍

[src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Horizontal Dimension

↩PREREQUISITES↩

A Horizontal Dimension constraint sets the how far apart two elements are, horizontally. Unlike the Distance Dimension constraint, it allows direction via positive and negative values.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Horizontal Dimension constraint, select the element or element components (e.g., points on a line). Then, use toolbar button 1 to present a drop-down and select Horizontal Dimension (keyboard shortcut L). A pop-up will ask for the length value. Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that breaks down in certain cases. For example, you can't apply to just a single point.

If the selection is ...

[src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Vertical Dimension

↩PREREQUISITES↩

A Vertical Dimension constraint sets the how far apart two elements are, vertically. Unlike the Distance Dimension constraint, it allows direction via positive and negative values.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Vertical Dimension constraint, select the element or element components (e.g., two points). Then, use toolbar button 1 to present a drop-down and select Vertical Dimension (keyboard shortcut I). A pop-up will ask for the length value. Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that breaks down in certain cases. For example, you can't apply to just a single point.

If the selection is ...

[src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Lock Position

↩PREREQUISITES↩

Lock Position is not a constraint, but a helper that applies both a Vertical Dimension constraint and a Horizontal Dimension constraint to the selection, effectively locking the selection in place.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To apply Lock Position, select the element or element components (e.g., two points). Then, use toolbar button 1 to present a drop-down and select Lock Position (keyboard shortcut K,L). Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that breaks down in certain cases. For example, you can't apply to just a single point.

If the selection is ...

[src]

Radius Dimension

A Radius Dimension constraint sets the radius of circles, arcs, and B-spline weight circles.

⚠️NOTE️️️⚠️

From the source:

After a B-spline is created, it is possible to define the weight of the control points by changing the radii of the weight circles. The equality constraints on the circles need to be deleted first. The radius constraint is arbitrary, the weight of the control points will be defined by the relative radii of the circles. It works similar to gravity: the bigger a circle is in relation to the others, the more the curve will be attracted to that control point.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Radius Dimension constraint, select the element or element component (e.g., two points). Then, use toolbar button 1 to present a drop-down and select Radius Dimension (keyboard shortcut K,R). A pop-up will ask for the radius value. Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

[src]

Diameter Dimension

A Diameter Dimension constraint sets the diameter of circles, and arcs.

⚠️NOTE️️️⚠️

Unlike Radius Dimension, Diameter Dimension cannot be used for B-splines. From the source:

It cannot be used for B-spline weight circles.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Diameter Dimension constraint, select the element or element component (e.g., two points). Then, use toolbar button 1 to present a drop-down and select Diameter Dimension (keyboard shortcut K,O). A pop-up will ask for the diameter value. Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

[src]

Angle Dimension

An Angle Dimension sets the angle between two edges, a line an an axis of the sketch, or the aperture angle of a circular arc.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Angle Dimension constraint, select the element or element component (e.g., two points). Then, use toolbar button 1 to present a drop-down and select Angle Dimension (keyboard shortcut K,A). A pop-up will ask for the angle value. Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

If the selection is ...

[src]

Radius-Diameter Dimension

↩PREREQUISITES↩

Radius-Diameter Dimension is not a constraint, but a helper that applies either a Radius Dimension constraint or a Diameter Dimension constraint to the selection, depending on the type of element it is.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To apply Radius-Diameter Dimension, select the element or element components (e.g., two points). Then, use toolbar button 1 to present a drop-down and select Radius-Diameter Dimension (keyboard shortcut K,S). A pop-up will ask for the diameter/radius value. Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that breaks down in certain cases. For example, you can't apply to just a single point.

If the selection is ...

[src]

Dimension

↩PREREQUISITES↩

Dimension is not a constraint, but a helper that allows cycling through most possible constraints for the element selection.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To apply Dimension, select the element or element components (e.g., two points). Then, use toolbar button 1 to present a drop-down and select Dimension (keyboard shortcut D). Continue to hit M until the desired constraint appears and click to apply. A pop-up may appear asking for a value (e.g., angle if the constraint is Angle Dimension constraint). Once the constraint has been created, press Esc to exit.

For example, if the selection is two lines, the possible constraints that can be cycled through may include Angle Dimension and Parallel.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that breaks down in certain cases. For example, you can't apply to just a single point.

[src]

Coincident

A Coincident constraint sets a point to lie on another point, edge (e.g., line, rim of an arc, rim of a circle, b-spline), or basis axis.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Coincident constraint, select the element or element component (e.g., two points). Then, use toolbar button 2 (keyboard shortcut C). A pop-up will ask for the angle value. Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

If the selection is ...

⚠️NOTE️️️⚠️

Apparently there use to be 2 separate constraints for Coincident? This is two separate constraints unified into one: The old Coincident constraint and the old Point-on-Object constraint.

[src]

Horizontal

A Horizontal constraint sets a pair of points or a line to be horizontal.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Horizontal constraint, select the element or element component (e.g., two points). Then, use toolbar button 3 to present a drop-down and select Horizontal (keyboard shortcut H). Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

[src]

Vertical

A Vertical constraint sets a pair of points or a line to be vertical.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Vertical constraint, select the element or element component (e.g., two points). Then, use toolbar button 3 to present a drop-down and select Vertical (keyboard shortcut V). Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

[src]

Horizontal-Vertical

↩PREREQUISITES↩

Horizontal-Vertical is not a constraint, but a helper that applies either a Horizontal constraint or a Vertical constraint to the selection.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To apply Horizontal-Vertical, select the element or element components (e.g., two points). Then, use toolbar button 3 to present a drop-down and select Horizontal-Vertical (keyboard shortcut A). Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that breaks down in certain cases. For example, you can't apply to just a single point.

If the selection is ...

[src]

Parallel

A Parallel constraint sets a pair of lines to be parallel.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Parallel constraint, select the element or element component (e.g., two lines). Then, use toolbar button 4 (keyboard shortcut P). Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

[src]

Perpendicular

A Perpendicular constraint sets a pair of lines to be perpendicular.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Perpendicular constraint, select the element or element component (e.g., two lines). Then, use toolbar button 5 (keyboard shortcut N). Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

[src]

Tangent-Colinear

A Tangent-Colinear constraint sets two edges (e.g., line, rim of an arc, rim of a circle, b-spline), or an edge and an basis axis, to be tangent. The constraint treats edges as if they're unbounded (e.g., lines are virtually extend out to infinity and open curves are virtually extended, for the purpose of tangency).

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Tangent-Colinear constraint, select the element or element component (e.g., two lines). Then, use toolbar button 6 (keyboard shortcut T). Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

[src]

Equal Constraint

An Equal constraint sets two edges (e.g., line, rim of an arc, rim of a circle, b-spline) to have the same length.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create an Equal constraint, select the element or element component (e.g., two lines). Then, use toolbar button 7 (keyboard shortcut E). Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

[src]

Symmetric

A Symmetric constraint sets two points to mirror each other symmetrically over a line, a basis axis, or around a point.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Symmetric constraint, select the element or element component (e.g., two lines). Then, use toolbar button 8 (keyboard shortcut S). Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

[src]

Block

A Block constraint fixes an edge (e.g., line, rim of an arc, rim of a circle, b-spline) in place. It's mainly intended for b-splines, which can be difficult to fully constrain otherwise.

FreeCAD sketcher workbench numbered constraint toolbar buttons

To create a Block constraint, select the element or element component (e.g., two lines). Then, use toolbar button 9 (keyboard shortcut K, B). Once the constraint has been created, press Esc to exit.

⚠️NOTE️️️⚠️

You can select the constraint first and then pick the two things to create a constraint between, but that may breaks down in certain cases where more than 1 selection is required.

[src]

Part Design Workbench

↩PREREQUISITES↩

Part Design workbench allows building 3D models, mostly by transforming 2D sketches into 3D features. For example, a sketch of a square that's 5mm by 5mm can be padded by 5mm to create a cube. Then, a sketch of a circle with a 3.5mm diameter can be placed on a face of that cube and pocketed to create a cylindrical hole through that cube.

FreeCAD Part Design workbench example

Features are built out using a non-destructive workflow. That means, as features build on top of other features, it's possible to modify earlier features and have the change cascade down to later features. For example, with cylinder-through-box example above, it's possible to go up and change box's dimensions and fillet its corners. The cylinder cut-out feature will still apply.

FreeCAD Part Design workbench example 2

FreeCAD Part Design workbench example 2 workflow

The core components of the Part Design workbench are parts_FC, bodies, and sketches. A body is a model built mostly by transforming 2D sketches into 3D features. If the object has multiple bodies to it, those bodies are placed under a standard part container.

PlantUML diagram

[src] [src]

User Interface

↩PREREQUISITES↩

FreeCAD part design workbench user interface

Body

Sketch

Helpers

Modeling Features

Transformation Features

[src]

Organization

↩PREREQUISITES↩

The core components of the Part Design workbench are standard parts_FC, bodies, and sketches. A standard part_FC holds one or more bodies, and each body typically compounds several sketches into 3D geometry. While bodies can be created outside of standard parts_FC, standard parts_FC are beneficial in that a standard part_FC encapsulates all bodies together as a unit (as well as can include other types of objects).

PlantUML diagram

Standard Part

A standard part_FC is a container that can hold one or more bodies, as well as other types of objects. Standard parts_FC aren't unique to the Part Design workbench, but they're valuable as an encapsulation for bodies because if what's being modeled consists of multiple bodies, having those bodies grouped under the same standard part_FC makes it easier to reuse in other workbenches (e.g., assembly workbench).

[src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Create

FreeCAD Part Design workbench toolbar

To create a standard part_FC, use toolbar button 1. Bodies can be moved in to / out of the standard part_FC by dragging them within the Model pane.

[src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Coordinate System

A standard part_FC has its own local coordinate system: Internally, bodies are moved and rotated using the local coordinate system. Externally, the standard part_FC (and all the bodies within it) is moveable and rotatable as a single unit.

FreeCAD part design workbench part model pane example

⚠️NOTE️️️⚠️

Axis and angle define rotation - axis defines a vector and angle rotates around that vector.

⚠️NOTE️️️⚠️

An easier way to set the orientation is, in the Model pane, right-click and choose Transform. It sets the same properties highlighted in the above screenshot, but it also provides gizmos in the viewport and a popup pane with more friendly ways to set.

[[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Body

↩PREREQUISITES↩

A body is a single contiguous 3D model, mostly built by compounding several sketches into 3D geometry in a chain. Each item in the chain is referred to as a feature, which is a distinct and editable.

The list of features nested under a body comprise a non-destructive workflow. For example, a sketch of a square that's 5mm by 5mm can be padded by 10mm to create a rectangular prism. Then, a sketch of a circle with a 3.5mm diameter can be placed on a face of that prism and pocketed to create a cylindrical hole through that cube.

FreeCAD Part Design workbench example 2

FreeCAD Part Design workbench example 2 workflow

[src] [src]

Create

FreeCAD Part Design workbench toolbar

Use toolbar button 3 to create a body. For certain operations, if there is no body, one is implicitly created when the operation runs (e.g., creating a new sketch from the Part Design workbench).

[src] [src]

Clone

FreeCAD Part Design workbench toolbar

Use toolbar button 8 to clone the current Model pane selection into a new body. A clone is linked, not copied. That means changing the original changes the clone.

[src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Coordinate System

Each body has its own local coordinate system that features nested within it are relative to. The properties of a body define its position and rotation within its parent container. In most cases, that parent container is a standard part_FC, but a body can also live outside of a standard part_FC.

FreeCAD part design workbench body translation properties

⚠️NOTE️️️⚠️

Axis and angle define rotation - axis defines a vector and angle rotates around that vector.

⚠️NOTE️️️⚠️

An easier way to set the orientation is, in the Model pane, right-click and choose Transform. It sets the same properties highlighted in the above screenshot, but it also provides gizmos in the viewport and a popup pane with more friendly ways to set.

[[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Binding Geometry

In certain cases, a piece of outside geometry may need to be pulled into the body for further manipulation (e.g., a model created using Part workbench - not Part Design workbench - always lives outside of the body). To import that outside geometry into the body, a subshape binder is required:

  1. Ensure the body is active.
  2. Select the outside geometry.
  3. Click subshape binder in the toolbar (green blob with 3 dots) to create a subshape binder object in the body.

FreeCAD Part Design workbench subshape binder example

The subshape binders Bind Mode property defines if it copies the original geometry or just links to it:

[src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Sketch

↩PREREQUISITES↩

Sketches are core to building out a body. As such, the Part Design workbench provides quick access to sketching functionality.

Create

FreeCAD Part Design workbench toolbar

To create a sketch, use toolbar button 4 and select New Sketch. If the 3D viewport has ...

⚠️NOTE️️️⚠️

Sketches cannot be attached to curved faces. The only workaround is to attach a datum plane on that face and center it somehow. That'll allow sketching onto the datum plane and cutting into the face / padding from the face (but you'll need to pad both ways because there'll be gaps between the datum plane and the curved face).

The other option is to use the curves workbench, which allows projecting a sketch onto a curved face.

Once created, the sketch will be entered in Edit mode (Sketcher Workbench will activate). Clicking the Leave Sketch button in the toolbar / clicking the Leave button above the Sketch Edit pane will pop out of the sketch and back into Part Design.

FreeCAD sketcher workbench popouts highlighted

[src]

Edit

FreeCAD Part Design workbench toolbar

To edit an existing sketch, select the sketch in the Model pane or 3D viewport, then use toolbar button 4 and select Edit Sketch.

[src]

Attach

FreeCAD Part Design workbench toolbar

To attach an existing sketch to something else (e.g., another face), select the thing to attach, then use toolbar button 4 and select Attach Sketch. A dialog will pop-up asking for which sketch to attach, then a subsequent dialog will pop-up asking for the method of attachment (should be Plane face most of the time.)

FreeCAD part design workbench attach sketch sketch selection FreeCAD part design workbench attach sketch method selection

[src]

Validate

FreeCAD Part Design workbench toolbar

To edit an existing sketch, select the sketch in the Model pane or 3D viewport, then use toolbar button 5. A Sketch Validation pane should appear wit buttons to test for specific issues.

FreeCAD Part Design workbench sketch validation

⚠️NOTE️️️⚠️

It's too much work to go through what all these are. At a high-level, it should mostly be self explanatory / you should be able to get it with a quick Google search.

🔍SEE ALSO🔍

[src]

Features

The subsections below detail feature types supported by the Part Design workbench. Most features present a Preview pane during creation.

FreeCAD Part Design workbench preview pane

Creation may also insert gizmos during creation that mirror parameters of whatever is being created. The example below has a arrow gizmo to control the depth parameter.

FreeCAD Part Design workbench hole example

⚠️NOTE️️️⚠️

I suspect this is likely to change in newer versions past 1.1, so I'm leaving this as a note:

For features that are additive (add to the model), the overlay typically shows as green. For features that are subtractive (intersections cut out from the model), the overlay typically shows as red. Some feature overlays, such as chamfers and fillets, the overlay typically shows up as purple.

Pad / Pocket

↩PREREQUISITES↩

A pad operation and a pocket operation are effectively the same thing, except that ...

FreeCAD Part Design workbench toolbar

To pad / pocket, select a sketch and use either toolbar button 9 (pad) or toolbar button 15 (pocket). Once selected, gizmos appear in the 3D viewport and a parameter pane opens.

FreeCAD Part Design workbench pad example

The Mode parameter defines which directions the sketch is extruded in:

One sided and Two sided both enable the Reversed parameter, which reverses direction / directions of extrusion.

The Type parameter defines the stopping point of the extrusion:

⚠️NOTE️️️⚠️

It isn't clearly explained what qualifies as a shape.

The Direction parameter defines the direction of the sketch's extrusion:

[src] [src]

Hole

↩PREREQUISITES↩

A hole operation cuts out a standardized fastener hole from existing geometry it collides with (e.g., hole for a screw or nail).

FreeCAD Part Design workbench toolbar

To create a hole, create a sketch with one or more circles, arcs, and/or points (other entities are ignored). Then, select the sketch and use toolbar button 16. Once selected, gizmos may appear in the 3D viewport and a parameter pane opens.

FreeCAD Part Design workbench hole example

The Base profile types parameter defines which sketch element types to make into holes:

The Standard and Size parameters define the thread standard to target. For example setting Standard to ISO metric regular and Size to M2x0.4 sets all holes to have a diameter of 2mm and a thread pitch of 0.4mm between peaks.

The Head type parameters defines what type / standard of screw head to model the hole for:

⚠️NOTE️️️⚠️

There are other head types based on standards. As of time of writing, I don't know enough about threading or head standards to fully understand a lot of what's going on here. The documentation also explains almost nothing / it's for an old version of the hole tool.

The Depth type parameter defines where the hole stops:

Below Depth type is a picture that shows the general type of fastener to expect based on the properties chosen (e.g., the type of head, if its got a pointy head). The picture highlights several attributes of the fastener, where those attributes are linked to fields that configure those attributes. For example, in the example screenshot linked to several fields, the ...

The Switch direction parameter reverses the direction of the hole cut-outs.

The Tapered parameter tapers the hole.

The Hole type parameter defines how holes should treat threads:

⚠️NOTE️️️⚠️

There are other head types based on standards. As of time of writing, I don't know enough about threading or head standards to fully understand a lot of what's going on here. The documentation also explains almost nothing / it's for an old version of the hole tool.

[src] [[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Revolution / Groove

↩PREREQUISITES↩

A revolution operation and a groove operation are effectively the same thing, except that ...

FreeCAD Part Design workbench toolbar

To revolve / groove, select a sketch and use either toolbar button 10 (revolution) or toolbar button 17 (groove). Once selected, gizmos appear in the 3D viewport and a parameter pane opens.

FreeCAD Part Design workbench groove example

The Type parameter defines which directions the sketch is extruded in:

Angle and Two angle both enable the Reversed parameter, which reverses direction / directions of extrusion.

Angle and Through all both enable the Symmetric to plane parameter, which defines if the plane should be in the middle of the extrusion (extrude half-way outward from the sketch and extrude half-way inward from the sketch). This parameter is only available for Type of Angle.

⚠️NOTE️️️⚠️

Symmetric to plane doesn't make any sense for Through all. Isn't this just the same as a full rotation (360 degrees)?

Axis defines the axis from which the rotation happens:

⚠️NOTE️️️⚠️

In most cases, you should pick planes/faces and sketch such that the horizontal / vertical axis of the sketch is the intended axis to rotate around.

⚠️NOTE️️️⚠️

In a sketch, the elements can't be named. As such, when you select a construction line, it's impossible to know which construction line you're setting. I complained about this here.

[src] [src]

Loft

↩PREREQUISITES↩

An additive loft operation and a subtractive loft operation are the same thing, except that ...

FreeCAD Part Design workbench toolbar

A loft creates a solid by transitioning through sketches that act as slices within the solid. To loft a set of sketches, either ...

FreeCAD Part Design workbench loft example

⚠️NOTE️️️⚠️

It's totally unclear / undocumented how loft makes its transitions between sketches. For example, ...

All ChatGPT says is that it delegates to OpenCASCADE.

Notes from source:

A loft's sketches must be spaced out. It's typically for all of a loft's sketches to be attached to the same face / plane, but each offset such there's gaps between them. A sketch can be offset and rotated relative to whatever surface it's attached to using its AttachmentOffset properties.

FreeCAD Sketcher workbench attachment offset

The Ruled surface parameter defines whether transitions between sketches are smooth or straight (straight if checked).

⚠️NOTE️️️⚠️

Documentation says this won't apply to a loft if it only has 2 sketches. I'm not sure why this is.

The Closed parameter makes a transition from the last sketch to the initial sketch, creating a loop.

[src] [src]

Pipe

↩PREREQUISITES↩

An additive pipe operation and a subtractive pipe operation are the same thing, except that ...

FreeCAD Part Design workbench toolbar

A pipe creates a solid by transitioning through sketches in addition to following a chain of one or more paths (e.g., edge, arc, b-spline). To pipe a path and a set of sketches, either ...

FreeCAD Part Design workbench pipe example

The pipe can transition through multiple paths and many sketches:

A pipe's sketches must be spaced out along the segments that make up the path, and the segments (lines, b-splines, etc..) that make up the path must be connected back-to-back. A common way to structure a pipe is to place sketches along a single b-spline. The b-spline can be created via the Part workbench or programmatically:

import FreeCAD as App
import Part

pts = [
    App.Vector(0,0,0),
    App.Vector(20,0,10),
    App.Vector(40,20,20),
    App.Vector(60,10,40),
]

curve = Part.BSplineCurve()
curve.interpolate(pts)

edge = curve.toShape()
wire = Part.Wire([edge])

obj = App.ActiveDocument.addObject("Part::Feature", "PipePath")
obj.Shape = wire
App.ActiveDocument.recompute()

Since the b-spline belongs to the Part workbench rather than the Part Design workbench, it lives outside of the Part Design body where the sketches live. It needs to be imported into that Part Design body using a subshape binder:

  1. Ensure the body is active.
  2. Select the b-spline.
  3. Click subshape binder in the toolbar (green blob with 3 dots) to create a subshape binder object in the body.

Sketches can then be attached to the b-spline by attaching them to that subshape binder. Each attached sketch can be placed somewhere along the b-spline by setting the sketch's Map Path Parameter property (0.0 places at start, 1.0 places at end). The sketch's normal will follow the b-spline's trajectory at the position its at, but can also be further manipulated using the sketch's Attachment Offset property.

FreeCAD Part Design workbench sketch path mapping and attachment offset

🔍SEE ALSO🔍

⚠️NOTE️️️⚠️

Much like loft, it's totally unclear / undocumented how pipe makes its transitions between sketches (e.g., which vertexes line up with which vertexes between sketches, what happens when there's more vertexes in one sketch vs the next).

Notes from source:

FreeCAD Sketcher workbench attachment offset

The Corner transition parameter defines how the path handles hard corners in the path:

The Orientation mode parameter defines how the profile rotates as it sweeps along the path:

⚠️NOTE️️️⚠️

Documentation for the above two properties are sparse.

Documentation says for Fixed, make a circular path so see what it means (it likely means the profile doesn't reorient based on the path and it just sticks with whatever orientation the initial profile sketch had).

[src] [src] [src]

Helix

↩PREREQUISITES↩

An additive helix operation and a subtractive helix operation are the same thing, except that ...

FreeCAD Part Design workbench toolbar

A helix creates a solid by taking a sketch and rotating it up / down some axis, similar to the threads of a screw. To helix a sketch, either ...

FreeCAD Part Design workbench helix example FreeCAD Part Design workbench helix sketch example

The Axis parameter controls which axis to rotate around.

The Left handed parameter rotates in the opposite direction (to the left rather than the right).

The Reversed parameter flips the ascension in the opposite direction (descends the helix instead).

The Mode parameter defines how the ascension and rotation are configured. The values control which configuration fields show up:

⚠️NOTE️️️⚠️

In the screenshot example, the sketch defines the helix's thread as well as the rotational cylinder's radius. Note how the sketch is 9.9mm out from the center and Axis is set to Vertical sketch axis, meaning the radius of the helix is 9.9mm.

If your helix follows a similar setup, unless you already have a face to attach to or want the helix at the origin, it may be a good idea to place a datum plane in the desired location and use it to sketch out a helix.

To place a datum plane matching the face's orientation but with a specific origin:

  1. Place a sketch on the face with ...

    • a point for the center of the helix rotation axis.
    • a horizontal line from the point.
    • a vertical line from the point.
  2. Create a new datum plane and use the center point as reference 1, the horizontal line as reference 2, and the vertical line as reference 3

  3. Set Attachment mode to Align O-X-Y.

  4. Place a sketch to new datum plane. The origin will be the center point.

🔍SEE ALSO🔍

⚠️NOTE️️️⚠️

To place a datum plane normal to the face's orientation, same steps as above but Attachment mode should be either Align O-N-Y or Align O-Y-N.

[src] [src]

Primitives

↩PREREQUISITES↩

An additive primitive and a subtractive primitive operation are the same thing, except that ...

FreeCAD Part Design workbench toolbar

A primitive is a primitive piece of 3D geometry (e.g., cube, sphere, torus). To create a primitive, use either toolbar button 14 (additive primitive) or toolbar button 21 (subtractive primitive) to show a drop-down of primitive types and select. Once selected, a Primitive Parameters pane will appear that defines the shape as well as a Select Attachment pane that defines how and what it attaches to. For full details, see sources.

FreeCAD Part Design workbench primitive example

[src] [src] [src] [src] [src] [src] [src] [src] [src] [src] [src] [src] [src] [src] [src] [src]

Fillet / Chamfer

↩PREREQUISITES↩

Fillet / chamfer cuts into a edge. A fillet's cut is rounded while a chamfer's cut is straight.

FreeCAD Part Design workbench toolbar

To apply fillet/chamfer, select relevant faces and edges and use either toolbar button 23 (fillet) or toolbar button 24 (chamfer).

⚠️NOTE️️️⚠️

Fillets and chamfers are notoriously brittle for non-destructive workflows. For example, if you add a fillet/chamfer but then make a modification in a previous step of the non-destructive workflow, the fillet/chamfer will fail. The edges will have changed and fillet/chamfer typically isn't able to automatically guess what the new edges are.

For this reason, I've seen only that they recommend leaving fillet/chamfer operations until the very end.

Tested on FreeCAD 1.1.1.

A Fillet Parameters / Chamfer Parameters pane will pop open. To add edges/faces, click Select, select the edges/face, and then click Confirm Selection. To remove edges/faces, click on the edge/face in the list and press Del.

For fillet, use the Radius field or the gizmos to set the radius of the curve.

FreeCAD Part Design workbench fillet example

For chamfer, use the Type or the gizmos to define how steep the the cut is:

⚠️NOTE️️️⚠️

When sides aren't equal, unsure how it picks which side is which.

FreeCAD Part Design workbench chamfer example

[src] [src]

Draft

↩PREREQUISITES↩

⚠️NOTE️️️⚠️

Draft looks to be broken for custom curves outsides of shapes derived from conics (e.g., spheres, half spheres, cylinders). Anything that involves a custom curved face won't work.

Draft adds an angle to one or more faces.

FreeCAD Part Design workbench toolbar

To apply draft, select relevant faces and use either toolbar button 25.

A Draft Parameters pane will pop open. To add faces, click Select, select the face, and then click Confirm Selection. To remove faces, click on the face in the list and press Del.

FreeCAD Part Design workbench draft example

The Draft angle field sets the angle to offset the faces (can be negative).

The Neutral Plane field sets the plane in which the edge must be anchored (won't lift or sink). To set, click the button and select a face. In the example above, the neural plane is the top face. The 4 sides which have draft applied fan out toward the bottom because the top edges are locked in place.

The Pull Direction field sets the direction in which the angle is applied. To set, click the button and select an edge (or something edge-like, like a datum line?).

⚠️NOTE️️️⚠️

I think Pull Direction is the normal of the face by default. Here's what the source says:

Set the the pull direction by pressing the Pull direction button, then select an edge. Pull Direction is only effective if the Neutral Plane has been set. Results can be unpredictable.

[src]

Thickness

↩PREREQUISITES↩

⚠️NOTE️️️⚠️

Thickness looks to be broken for custom curves outsides of shapes derived from conics (e.g., spheres, half spheres, cylinders). Anything that involves a custom curved face won't work.

One thing I've tried doing that may work in some cases where thickness fails is a subtractive loft. You take profile sketches and punch through the solid. You may need to do multiple such subtractive lofts to get what you're hoping for.

Thickness removes one or more faces and cuts out the inside of the object, giving it a bowl-like / shell-like effect.

FreeCAD Part Design workbench toolbar

To apply thickness, select relevant faces and use toolbar button 26.

A Thickness Parameters pane will pop open. To add faces, click Select, select the face, and then click Confirm Selection. To remove faces, click on the face in the list and press Del.

FreeCAD Part Design workbench thickness example

The Thickness field sets the thick the shell is. If Make thickness inwards is clicked, the original outline is kept but hollowed out vs padding the original outline to generate the shell.

The Mode field must be set to Skin.

⚠️NOTE️️️⚠️

According to the source, the only option implemented for Mode is Skin and you shouldn't be selecting anything else. See source for more information.

The Join type field defines how non-tangential faces of the shell are joined together:

The Intersection checkbox avoids self-intersection in some models.

⚠️NOTE️️️⚠️

According to the source, it's recommended to leave the Intersection checkbox unchecked because it relies on some unimplemented methods in a dependent library. See source for more information.

[src]

Boolean

↩PREREQUISITES↩

Boolean moves one or more outside bodies into the active body and performs a boolean/set operation (union, intersection. subtraction).

FreeCAD Part Design workbench toolbar

To apply boolean, select relevant faces and use toolbar button 22. A Boolean Parameters pane will pop open.

FreeCAD Part Design workbench boolean example

To move a body into the active body, click Add Body and select the body. To move an added body back out, click Remove Body and select the body in Model pane.

The drop-down below the list of added bodies is the operation to perform:

⚠️NOTE️️️⚠️

You almost always will need to move and reorient the body when you're doing boolean operations like this.

🔍SEE ALSO🔍

[src]

Mirror

↩PREREQUISITES↩

Mirror copies either the entire body or specific features across a plane.

FreeCAD Part Design workbench toolbar

To apply mirror, use toolbar button 27. A Mirror Parameters pane will pop open.

FreeCAD Part Design workbench mirror example

Select Transform body for mirroring of the full model or Transform tool shapes to mirror specific features. If Transform tool shapes is selected, for each feature to mirror, click Add Feature and select the feature in the Model pane. Likewise, remove a feature being mirror by clicking Remove Feature and selecting the feature in the Model pane.

⚠️NOTE️️️⚠️

Does order of the selected features matter? A safe bet is likely to add features in the same order.

The Plane field selects the plane across which mirroring happens:

🔍SEE ALSO🔍

⚠️NOTE️️️⚠️

It looks like the safest bet is to build your own datum plane. To place a datum plane perpendicular to some face's orientation, ...

  1. create a sketch on the face and insert 3 points in an L shape.
  2. exit the sketch and reference those points to create a datum plane.
  3. set the datum plane's Attachment mode to either Align O-N-Y or Align O-Y-N.

Instead of a sketch with points, you can also try placing 3 datum points on the face's edges, moving those datum points using the Map Path Property (it's hidden in the properties tab - you need to right click and show hidden properties).

[src]

Polar Pattern

↩PREREQUISITES↩

Polar pattern copies either the entire body or specific features, multiple times around an axis.

FreeCAD Part Design workbench toolbar

To apply polar pattern, use toolbar button 29. A Polar Pattern Parameters pane will pop open.

FreeCAD Part Design workbench polar pattern example

Select Transform body for patterning of the full model or Transform tool shapes to pattern specific features. If Transform tool shapes is selected, for each feature to mirror, click Add Feature and select the feature in the Model pane. Likewise, remove a feature being mirror by clicking Remove Feature and selecting the feature in the Model pane.

⚠️NOTE️️️⚠️

Does order of the selected features matter? A safe bet is likely to add features in the same order.

The Axis field selects the axis across which copying happens:

⚠️NOTE️️️⚠️

It may be best to use a datum line here. Create a sketch on the face, put the point that the datum line should pass through (make sure to fully constrain it by locking it into place or using projected construction geometry), exit the sketch, and insert a datum line referencing the point and the face using attachment mode "Normal to surface".

🔍SEE ALSO🔍

When Mode is ...

[src]

Linear Pattern

↩PREREQUISITES↩

Linear pattern copies either the entire body or specific features, multiple times in a straight line.

FreeCAD Part Design workbench toolbar

To apply linear pattern, use toolbar button 28. A Linear Pattern Parameters pane will pop open.

FreeCAD Part Design workbench linear pattern example

Select Transform body for patterning of the full model or Transform tool shapes to pattern specific features. If Transform tool shapes is selected, for each feature to mirror, click Add Feature and select the feature in the Model pane. Likewise, remove a feature being mirror by clicking Remove Feature and selecting the feature in the Model pane.

⚠️NOTE️️️⚠️

Does order of the selected features matter? A safe bet is likely to add features in the same order.

The Direction area selects the line across which copying happens:

⚠️NOTE️️️⚠️

It may be best to use a datum line here. Create a sketch on the face with a line (make sure to fully constrain it by locking it into place or using projected construction geometry).

When Mode is ...

The Direction 2 checkbox displays a second Direction area, which is used to copy the copies from the first direction area. In the example screenshot, the first direction area produces 3 holes upward, while the second direction area places 3 copies of those 3 holes across, totalling 9 holes.

[src]

Multi-Transform

↩PREREQUISITES↩

Multi-transform is a container that can apply a chain of linear pattern, polar pattern, and mirror features. In addition, it can apply scaling to copies produced by these features.

FreeCAD Part Design workbench toolbar

To apply multi-transform, either ...

⚠️NOTE️️️⚠️

If you're importing: I suspect the selection has to be made in order to be added? Also each selection must to target the exact same set of features added in the exact same order?

A Multi-Transform Parameters pane will pop open.

FreeCAD Part Design workbench multi-transform example

Select Transform body for patterning of the full model or Transform tool shapes to pattern specific features. If Transform tool shapes is selected, for each feature to mirror, click Add Feature and select the feature in the Model pane. Likewise, remove a feature being mirror by clicking Remove Feature and selecting the feature in the Model pane.

⚠️NOTE️️️⚠️

Does order of the selected features matter? A safe bet is likely to add features in the same order.

Right-click inside the Transformations list to add, delete, edit, and reorder transformations. The Scale transformation takes copies made in the previous transformation and applies compound scaling (e.g., first copy is 2x scaled, second copy, 3x scaled, etc..), as shown in the example. For copies of the body, this may work as intended. For copies of features, this may not work as intended (e.g., in the example screenshot, notice that the pockets don't seat on the face as they scale).

[src] [src]

Datum Geometry

↩PREREQUISITES↩

Datum geometry are helper primitives typically used to position other objects (e.g., sketches, features), similar to construction geometry in sketches. Datum geometry aren't unique to the Part Design workbench.

Datum geometry can inserted into the current body using the toolbar button next to the button that creates a new standard part_FC.

FreeCAD Part Design workbench datum geometry toolbar

[src]

Datum Point

A datum point commonly needs one or more objects to define its attachment / positioning (e.g., faces, lines, vertices). To insert a datum point, either ...

FreeCAD Part Design workbench datum geometry toolbar

The Attachment mode parameter defines what types of objects are needed for positioning / attachment (hovering over an option describes what it does as well as supported reference types). Once attached, the Attachment offset parameters tweak the position by offsetting and a rotation.

FreeCAD Part Design workbench datum point example

The example above attaches the datum point to a vertex and then positionally offsets itself.

⚠️NOTE️️️⚠️

One thing I found that might be useful for the future:

  1. Attach to the datum point to an edge (and nothing else) and set Attachment mode to On edge.
  2. Click OK to finish placing the datum point.
  3. Select the datum point, right-click in the Properties pane, and enable Show hidden.
  4. Set the Map Path Parameter to move the point along the line (between 0 to 1).

Why does this matter? I wanted to use this to appropriately position a helix, but it didn't work out. You can use two datum points to make a datum line, but a datum line is infinite (it doesn't have a start/stop). Furthermore, FreeCAD currently doesn't let you further put a datum point on that datum line. The idea I had was to use datum points to create a datum line, then place a datum point on that datum line to act as the center point for a datum plane. The datum plane's normal would be defined with another datum line that's 90 degrees to the first datum line.

ChatGPT instead suggested I place a sketch on the face with ...

Then, create a new datum plane and use the center point as reference 1, the horizontal line as reference 2, and the vertical line as reference 3, and Align O-X-Y as the Attachment mode. You can then attach a sketch to that datum plane and the origin will be the center point.

[src]

Datum Line

↩PREREQUISITES↩

A datum line typically needs one or more objects to define its attachment / positioning (e.g., faces, lines, vertices). To insert a datum line, either ...

FreeCAD Part Design workbench datum geometry toolbar

The Attachment mode parameter defines what types of objects are needed for positioning / attachment (hovering over an option describes what it does as well as supported reference types). Once attached, the Attachment offset parameters tweak the position by offsetting and a rotation.

FreeCAD Part Design workbench datum line example

The example above attaches the datum line to 2 datum points, defining that line.

⚠️NOTE️️️⚠️

In the 3D viewport, the line doesn't extend all the way to the second point. That's likely because a datum line is unbounded and should be treated more like an axis than a line that starts/stops at specific points?

[src]

Datum Plane

↩PREREQUISITES↩

A datum plane needs one or more objects to define its attachment / positioning (e.g., faces, lines, vertices). To insert a datum line, either ...

FreeCAD Part Design workbench datum geometry toolbar

The Attachment mode parameter defines what types of objects are needed for positioning / attachment (hovering over an option describes what it does as well as supported reference types). Once attached, the Attachment offset parameters tweak the position by offsetting and a rotation.

⚠️NOTE️️️⚠️

There are lots of attachment modes, but it seems the align ones are the simplest to use.

FreeCAD Part Design workbench datum plane example

The example above attaches the datum plane to a vertex (origin) and 2 edges (normal vector and Y vector), defining that plane.

[src]

Local Coordinate System

↩PREREQUISITES↩

A local coordinate system is a frame of reference, defining it's own origin and basis axes relative to the parent origin and basis axes. A local coordinate system needs one or more objects to define its attachment / positioning (e.g., faces, lines, vertices). To insert a datum line, either ...

FreeCAD Part Design workbench datum geometry toolbar

Many objects come with their own builtin local coordinate system (e.g., a prism may have its own local coordinate system, where the vertexes of the prism are defined related to that local coordinate system). Objects may also be attached to local coordinate system (or some other object with a builtin local coordinate system), such that their position and/or orientation are relative to the local coordinate system (Attachment Mode property). [src] [src]

Variable Sets

Quality-of-life Settings

The following sections highlight several settings to improve quality-of-life.

Enable dark mode:

The following instructions enable dark mode.

  1. Go to EditPreferencesGeneralGeneral and set Theme to FreeCAD Dark.

[[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Easier selections using trackpad

The following instructions make it easier to select items using a trackpad, where you don't have the same level of precision as a mouse.

  1. Go to EditPreferencesDisplay3D View and set Marker size to 11 px.
  2. Go to EditPreferencesGeneralSelection and set Radius to 11 px.
  3. Go to EditPreferencesSketcherAppearance and set all line widths to 4 px (these seem to just be for elements, not constraints?).
  4. Go to EditPreferencesPart DesignShape Appearance and set Vertex Size to 9 px (can't seem to go till 11).
  5. Go to EditPreferencesPart DesignShape Appearance and set Line Width to 4 px.

Rotate at point

The following instructions make it so that rotation happens at where your mouse cursor is at, not at the viewport center.

  1. Go to EditPreferencesDisplayNavigationNavigation and set Rotation mode to Drag at cursor.

[[self src]](data:text/plain,This%20was%20derived%20using%20self%20experimentation%20-%20there%20is%20no%20source%20other%20than%20myself.)

Macro Ideas

Boolean Union Lineup

Given two bodies A and B, this script helps position body B when union'd onto body A. Both body A and body B should have a local coordinate system positioned and oriented at the attachment point. The macro will translate and rotate body B such that its LCS matches body A's LCS.

This script assumes flat faces from body A and body B will be "kissing" when the local coordinate systems line up. This might be a problem if floating point rounding error causes FreeCAD to see a gap between the faces (see here).

import FreeCAD as App
import FreeCADGui as Gui

doc = App.ActiveDocument
sel = Gui.Selection.getSelection()

if len(sel) != 2:
    raise Exception("Select exactly two LCS objects: first A_LCS, second B_LCS")

a_lcs = sel[0]
b_lcs = sel[1]

# Find the Body that owns B_LCS
b_body = b_lcs.getParentGeoFeatureGroup()
if b_body is None:
    raise Exception("Could not find Body containing B_LCS")

# Global placement of target LCS on A
a_lcs_global = a_lcs.getGlobalPlacement()

# Global placement of source LCS on B, before moving B
b_lcs_global = b_lcs.getGlobalPlacement()

# Global placement of B Body, before moving it
b_body_global = b_body.getGlobalPlacement()

# Transform needed to move B_LCS onto A_LCS
delta = a_lcs_global.multiply(b_lcs_global.inverse())

# Apply same transform to B Body
b_body_new_global = delta.multiply(b_body_global)

# Convert back to local placement if B Body has a parent container
parent = b_body.getParentGeoFeatureGroup()
if parent is not None:
    parent_global = parent.getGlobalPlacement()
    b_body.Placement = parent_global.inverse().multiply(b_body_new_global)
else:
    b_body.Placement = b_body_new_global

doc.recompute()

print("Moved B Body so B_LCS matches A_LCS")

Example screenshot of macro

Terminology